來 Azure 學習 OpenAI 二 - 環境構建
Jambo
Posted on April 3, 2023
大家好,我是微軟學生大使 Jambo 。如今,越來越多的人擁有多台開發設備,例如在家和辦公室都有電腦。但是跨設備開發是件麻煩的事情,因為你不僅需要同步文件,還需要在不同的設備上安裝相同的開發環境。而對於使用輕型設備,比如 Chromebook 和 iPad,複雜的開發環境也很難被支持。在這種情況下,雲端開發將會是一個很好的選擇。
把工作環境放在雲端,無論你使用哪個設備,只要能上網,你就可以獲得完全統一的開發環境,而且無需擔心硬件算力的問題。例如,你可以在iPad上打開雲端開發環境,然後在筆記本電腦上繼續工作,這種靈活性是傳統開發模式無法比擬的。
我在這篇文章中將會介紹兩種在雲上開發的方式,一種是使用 GitHub Codespaces,另一種是使用 Azure ML。
Codespaces 是什麼
GitHub Codespaces 是一種託管在雲端的開發環境,它可以讓你利用雲服務器資源進行開發和編譯。 Codespaces 運行在 Azure 虛擬機中的 Docker 容器中,默認情況下使用 Ubuntu Linux 映像。你可以根據自己的需求對 Codespaces 進行配置,同時其他人也可以使用你為項目配置的環境創建自己的 Codespaces 進行標準化的工作。
你可以從瀏覽器、Visual Studio Code、JetBrains Gateway 應用程序或使用 GitHub CLI 連接到 Codespaces。就像在本地開發一樣,Codespaces 可以保存你所做的代碼修改和文件更改,即使停止了 Codespaces,也可以在以後繼續使用。除非你將 Codespaces 刪除,否則它將一直佔用雲上的資源。
如何創建 Codespaces
你可以從項目倉庫或現有模板創建 Codespaces。如果你從項目倉庫創建 Codespaces,它會自動將倉庫克隆到開發環境中。如果倉庫中包含 .devcontainer
文件夾,則說明項目作者為該項目創建了標準的 Codespaces 配置。在創建 Codespaces 時,將自動使用此配置創建容器。
為儲存庫創建
進入儲存庫,點擊左上角的 “Code” ,在 “Codespaces” 標籤中點擊 “Create Codespaces on {fork-name}”
如果你要做關於服務器地區、核心數量的設置,也可以在 “New with options...” 中進行設定。
從模板創建
我們可以從 GitHub 頁首的 Codespaces
進入此頁面,其中包含了官方提供的一些模板,你也可以在其中管理你的 Codespaces。
在“See all” 中可以查看完整的模板列表,點擊模板的黑體名字也可以查看模板 儲存庫。
點擊“Use this template”就可以根據模板創建 Codespaces 。如果你在模板儲存庫也可以在 “Use this template” 中點擊 “Open in a Codespaces” 創建。
配置 Codespaces
Codespaces 是運行在 Docker 容器中的,因此你可以為儲存庫配置專門的開發環境。 Codespaces 的配置文件是 devcontainer.json
,通常位於 .devcontainer
目錄中。你可以創建多個配置文件,但是這種情況下它們需要儲存在各自的子目錄中,例如:
.devcontainer/database-dev/devcontainer.json
-
.devcontainer/gui-dev/devcontainer.json
當你進入 Codespaces 時,呼出 VS code 的命令面板(ctrl
+shift
+P
),鍵入 “add dev” ,並點選。
選擇 “Create...” 以創建新的配置,如果你要編輯現有的配置文件就選擇 “Modify...”。
選擇 “Show All Definitions...”。
接下來根據自己的需要選擇環境,這裡我選擇 “Python 3”,然後選擇你想要的版本。
然後選擇你想要添加的功能,比如環境管理工具 “Conda”。
為了讓 conda 可以順利初始化,我們需要修改 devcontainer.json
中的 postCreateCommand
參數,這個參數是第一次創建 Codespaces 時會執行的命令。關於其他參數可以參考 metadata reference。
"postCreateCommand": "conda init && source ~/.bashrc"
我們呼出命令面板,輸入 “rebuild” 讓他重新構建。
等他構建完成後,可以看到他已經自動安裝了 Python 相關的拓展。
並且 conda 也可以正常使用了,我們可以創建一個新的 python 環境。
$ conda create -n openai python=3.11
...
Proceed ([y]/n)? y
...
$ conda activate openai
這時我們就可以在 “openai” 這個環境中進行開發。我們首先安裝一些需要的庫。
pip install openai
我們開一個 Jupyter 來做個示例。首先需要選擇正確的內核,點擊左上角的 “Select Kernel”,“Select Another Kernel”,“Python Env...”,選擇 “openai”,如果你先前創建的 conda 環境不在此列表中,可以點擊左上角的刷新鍵來刷新。
我在 Azure 上開了一個 OpenAI 服務,將 Key 等相關數據儲存在 develop.json
中,然後通過 openai
庫調用 API。
如果你更習慣 Jupyter 的界面,而不是 VS code,Codespaces 也支持端口轉發。
pip install jupyterlab
jupyter lab
你可以在 Terminal 的 PORTS 頁面中查看轉發的端口。只要 CodeSpaces 是開啟狀態,你就可以通過對應的網址訪問端口。
如果你想讓其他人也能夠訪問端口,你還可以將端口設為公開,此時即使是沒有登錄 GitHub 的情況下也可以進入網頁。
管理 Codespaces
在使用 Codespaces 時,會產生計算費用和儲存費用。為了避免不必要的損失,你需要記得停止或關閉 Codespaces。當停止 Codespaces 時將不會產生計算費用,但是仍會產生儲存費用。
如果你的 Codespaces 是從模板創建的,你可以在管理頁面中將其內容髮佈到儲存庫中。請注意,如果你要將 Codespaces 發佈到儲存庫中,Codespaces 需要處於停止狀態。
選擇“公開”或者“私人”後點擊創建即可。
除了發布和刪除 Codespaces,管理頁面還可以讓你查看和修改 Codespaces 的配置信息,如 Docker 鏡像、環境變量等。此外,你還可以查看與 Codespaces 相關的費用信息,以及訪問控制等設置。即使停止 Codespaces,他也會將你的更改保存下來,除非你將其刪除,才會徹底釋放在雲上的資源。
項目地址:https://github.com/JamboChen/codespases-Jambo
Azure ML 是什麼
如果你需要進行深度學習或 CUDA 方面的開發,那麼一定少不了要安裝各種驅動和庫,這是個十分繁瑣的工作。而 Azure 機器學習可以幫助你快速搭建一個 GPU 加速的環境,可以讓你直接進行相關的開發。
創建 Azure ML
對於學生黨,可以參考我上一篇教程 註冊 Azure 和申請 OpenAI 來創建 Azure 賬號,可以獲得 Azure 100 美金的免費額度。
進入 Azure 首頁,上方搜索框中輸入 “機器學習”,點擊 “Azure 機器學習”。
點擊 “創建”。
在 “創建 Azure 機器學習工作區” 頁面中,你可以選擇你的訂閱,以及工作區的名稱、位置、資源組等信息。要注意的是,如果你需要 GPU 資源, 那麼地區一定要選擇 “West US 2”
確認無誤後點擊 “審閱和創建”,再次確認後點擊 “創建”。等待創建完成後,你就可以進入 Azure 機器學習的管理頁面了。
在左側菜單的 “計算” 頁面中,點擊 “新建”。
根據你的需要選擇虛擬機類型,這裡我選擇 “GPU”,他默認使用 Tesla K80 GPU,如果你需要更高性能的 GPU,可以選擇 “從所有選項中選擇”。但你可能需要申請配額。點擊創建後稍等片刻就創建成功了
我們可以轉到 “Notebooks” 頁面,點擊 Terminal,進入終端。輸入 nvcc --version
來查看 cuda 的信息。
接下來我們新建一個 helloworld.cu
文件。
nano helloworld.cu
輸入以下代碼,Ctrl
+ X
退出,Y
保存,Enter
確認。
#include <stdio.h>
__global__ void helloFromGPU()
{
printf("Hello World! from thread [%d, %d]\
block [%d, %d]\n",
threadIdx.x, threadIdx.y,
blockIdx.x, blockIdx.y);
}
int main()
{
printf("Hello World! from CPU\n");
// declare a 2D grid and 2D block
dim3 block(1, 2);
dim3 grid(1, 2);
// launch the kernel on the device
helloFromGPU<<<grid, block>>>();
// wait for all previous operations to complete
cudaDeviceSynchronize();
return 0;
}
運行編譯命令。要注意的是由於 K80 架構較舊,所以我們需要指定架構,否則將無法正確執行 GPU 相關的代碼。
nvcc -arch=sm_37 helloword.cu -o helloword
./helloword
架構相關的信息可以參考下圖:
在這個頁面上,還可以創建 ipynb 文文件。
當然如果你更習慣 Jupyter 的界面,也可以從 “計算” 頁面中進入。
要注意的是 Azure ML 是計時收費的,所以如果你有段時間不使用,可以將其停止,以免產生不必要的費用。
最後這裡整理一份給大學生們的免費資源:
Azure 免費資源:https://aka.ms/studentgetazure
GitHub 教育包:https://aka.ms/GitHubStudentDevPackSS23
系列往期文章:
Posted on April 3, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024