您可以通過FastGPU提供的Python介面,將FastGPU整合到您的人工智慧訓練或推理指令碼中,從而快速地實現雲上部署和資源管理。本文為您介紹FastGPU的Python SDK相關使用說明。
前提條件
用戶端已安裝Python 3.6或以上版本。
說明您的ECS執行個體、本地機器、阿里雲Cloud Shell工具等均可以作為用戶端安裝FastGPU來構建人工智慧計算任務。
已擷取阿里雲存取金鑰(AccessKey)。更多資訊,請參見建立AccessKey。
環境準備
執行以下命令,安裝FastGPU軟體包。
pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.5-py3-none-any.whl
執行以下命令,配置環境變數。
配置環境變數時,需要您提前在您的ECS執行個體、本地機器或阿里雲Cloud Shell工具上,擷取阿里雲帳號AccessKey(AccessKey ID和AccessKey Secret)、預設地區以及預設可用性區域等資訊。更多資訊,請參見地區和可用性區域。
export ALIYUN_ACCESS_KEY_ID=**** # 填入您的AccessKey ID export ALIYUN_ACCESS_KEY_SECRET=**** # 填入您的AccessKey Secret export ALIYUN_DEFAULT_REGION=cn-hangzhou # 填入您希望使用的地區(Region) export ALIYUN_DEFAULT_ZONE=cn-hangzhou-i # (選填)填入您希望使用的地區的可用性區域
執行以下命令,在Python代碼中匯入FastGPU模組。
import fastgpu
建立或擷取執行個體
fastgpu.make_job方法會自動按規則建立執行個體集合。如果執行個體集合已存在,則返回執行個體集合。
job = fastgpu.make_job(
name: str="", # (必填)設定執行個體叢集名稱
instance_type: str="", # (必填)設定執行個體類型
num_tasks: int=0, # 設定建立執行個體個數
install_script: str="", # 設定初始化命令
image_name: str="", # 設定鏡像名稱
image_type: str="", # 設定鏡像類型
disk_size: int=500, # 設定資料盤大小
spot: bool=False, # 設定是否搶佔式執行個體
confirm_cost: bool=False, # 設定是否跳過消費警告
install_cuda: bool=False, # 設定是否自動安裝GPU驅動
mount_nas: bool=False # 設定是否掛載NAS盤
)
上述樣本涉及的參數說明如下:
參數名稱 | 是否必填 | 參數說明 | 參數樣本 |
name | 是 | 執行個體叢集名稱。 預設值:空。表示從當前現有的資源中擷取。 | 指定執行個體叢集名稱為fastgpu_test,即
|
instance_type | 是 | 執行個體類型。 您可以使用命令列 | 指定執行個體類型為單卡V100機型,即
|
num_tasks | 否 | 建立執行個體的數量。 預設值:1。 | 指定建立一個執行個體,即
|
install_script | 否 | 執行個體初始化指令碼。 預設值:空。表示不執行任何命令。 | 初始化完成後,啟動SSH服務,即
|
image_name | 否 | 執行個體鏡像名稱。 預設值:空。表示將會自動使用Alibaba Cloud Linux 2.1903作為預設鏡像。 更多鏡像名稱可通過命令列 | 指定鏡像名稱為CentOS,即
|
image_type | 否 | 執行個體鏡像類型。 您可以將參數指定為作業系統類型 | 設定鏡像類型為ubuntu 16.04,即
|
disk_size | 否 | 設定資料盤大小。 預設值:500,單位:GB。 | 設定資料盤大小為500 GB,即
|
spot | 否 | 是否為搶佔式執行個體。 預設值:False。 | 設定為搶佔式執行個體,即
|
confirm_cost | 否 | 確認是否跳過消費警告。 預設值為False,即不跳過消費警告,建立執行個體過程中會彈出輸入確認項。 | 設定跳過消費警告,即
|
install_cuda | 否 | 設定是否為GPU自動安裝驅動。 預設值為False,即不安裝驅動。 | 設定為GPU自動安裝驅動,即
|
mount_nas | 否 | 設定是否自動掛載NAS盤。 更多資訊,請參見什麼是Apsara File Storage NAS。 | 設定自動掛載NAS盤,即
|
傳回值:返回一個Job對象,代表一個執行個體叢集,執行個體叢集可以通過訪問Tasks成員訪問到具體單個執行個體。job可以包含若干Task,關係如下圖所示:
job = fastgpu.make_job(...) # 建立Job
job.run("ls -l") # 叢集執行ls -l命令
job.tasks[0].run("ls -l") # 單個執行個體(task0)執行命令
程式碼範例:建立一個名稱為fastgpu_test的job,該Job是包含2個執行個體(task)的對象,您可以通過訪問Job對象的Tasks來訪問建立出的執行個體列表。具體範例程式碼如下:
job = fastgpu.make_job(
name="fastgpu_test", # 執行個體叢集名稱
num_tasks=2, # 執行個體數量,建立2個執行個體
instance_type="ecs.gn6v-c8g1.2xlarge", # 執行個體類型
image_type="ubuntu_18_04", # 執行個體鏡像類型,比如為Ubuntu 18.04
disk_size=500, # 資料盤大小為500 GB
confirm_cost=True, # 是否確認消費警告
spot=True, # 是否搶佔型執行個體
install_cuda=True, # 是否自動安裝GPU驅動
mount_nas=True # 是否自動掛載NAS盤
)
task1 = job.tasks[0]
task2 = job.tasks[1]
運行命令
叢集或執行個體運行指定命令,運行完成後會將輸出儲存到指定目錄下。
# 支援整個叢集運行命令
job.run(cmd, # 啟動並執行命令
sudo=False, # 是否以管理員權限運行
non_blocking=False, # 是否以非阻塞運行任務
ignore_errors=False, # 是否忽略錯誤,預設如果執行報錯,則拋出一個異常
max_wait_sec=365*24*3600, # 最大逾時時間
show=False, # 運行結束後是否輸出結果
show_realtime=False # 是否即時列印輸出
)
# 同理也支援單一實例運行命令
job.tasks[i].run(cmd, ...)
上述運行命令的參數說明如下:
參數名稱 | 參數說明 | 參數樣本 |
sudo | 是否以管理員權限運行命令。 預設值為False,即不以管理員權限運行。 | 設定以管理員權限運行,即
|
non_blocking | 是否非阻塞運行命令。 預設值為False,即執行過程中等待直到執行完成。 | 設定非阻塞執行,即
|
ignore_errors | 是否忽略報錯。 預設值為False,即執行遇到異常則終止程式,報錯時會顯示異常。 | 設定忽略執行報錯,即
|
max_wait_sec | 最大逾時時間,單位:秒。 預設值:365*24*3600(1年)。 | 設定最大逾時時間為1小時,即
|
show | 運行結束後是否輸出結果。 預設值為False。 | 設定運行後輸出結果,即
|
show_realtime | 是否即時輸出運行結果。 預設值為False。 | 設定即時輸出顯示,即
|
程式碼範例:
# 叢集運行 "ls",列出每個執行個體工作目錄下的檔案和檔案夾
job.run("ls")
# 單一實例運行 "ls", 列出第i個執行個體工作目錄下的檔案和檔案夾
job.tasks[i].run("ls")
檔案傳輸
上傳檔案到叢集或單個執行個體
# 上傳檔案到叢集 job.upload(local_fn: str, remote_fn: str="", dont_overwrite: bool=False) # 上傳檔案到叢集中第i個執行個體 job.tasks[i].upload(local_fn: str, remote_fn: str="", dont_overwrite: bool=False)
上述運行命令的參數說明如下:
參數名稱
是否必填
參數說明
參數樣本
Iocal_fn
是
本地檔案路徑。
設定需要上傳到執行個體的檔案路徑,即
local_fn="/root/test_download.fn"
。remote_fn
否
上傳目標路徑。
預設值:空。表示上傳到和local_fn相同的路徑下。
設定執行個體內檔案路徑,即
remote_fn="/root/test.txt"
dont_overwrite
否
是否覆蓋原有檔案。
預設值為False,表示自動覆蓋已存在的檔案。
設定為不覆蓋原有檔案,即
dont_overwrite=True
。從叢集或單個執行個體下載檔案到本地
# 叢集下載檔案 job.download(remote_fn, local_fn: str="") # 叢集中第i個執行個體下載檔案 job.tasks[i].download(remote_fn, local_fn: str="")
重要當機器數量大於2台時,叢集下載檔案會引入檔案衝突,不建議使用。
上述運行命令的參數說明如下:
參數名稱
是否必填
參數說明
參數樣本
remote_fn
是
遠程檔案路徑。
設定第i個執行個體中的檔案路徑,即
remote_fn="/root/test.txt"
。local_fn
否
本地檔案路徑。
預設值:空。表示下載到和remote_fn相同的本地路徑下。
設定下載到本地的檔案路徑,即
local_fn="/root/test_download.fn"
。
程式碼範例:為叢集中所有執行個體上傳檔案,並通過某一個執行個體下載到本地。
# 上傳/root/test.txt到叢集中所有執行個體的/root/下
job.upload("/root/test.txt")
# 從task[0]執行個體中下載txt檔案到當前路徑下
job.tasks[0].download("/root/test.txt", "./test.txt")
停止執行個體
停止叢集或單個執行個體。
# 停止整個叢集的執行個體。
job.stop(
keep=False, # 停止叢集後,是否仍然計費
force=False # 是否強制停止
)
# 停止叢集中第i個執行個體
job.tasks[i].stop(
keep=False, # 停止執行個體後,是否仍然計費
force=False # 是否強制停止
)
程式碼範例:
job.stop(force=True, keep=True) # 強制停止整個叢集,並保持收費
上述運行命令的參數說明如下:
參數名稱 | 參數說明 | 參數樣本 |
keep | 是否保持計費。 預設值為False,即不計費。 | 設定停止後仍計費,即
|
force | 是否強制停止。 預設值為False,表示不強制停止,遇到無法退出的程式可能阻塞。 | 設定強制停止,即
|
釋放執行個體
永久刪除叢集或執行個體,釋放執行個體佔用的資源。
執行個體釋放後,執行個體ID、固定公網IP、系統硬碟、設定隨執行個體釋放的資料盤等資料和資源將隨之釋放且不可恢複,EIP、設定不隨執行個體釋放的資料盤等獨立的資源將自動解除綁定。請謹慎執行釋放操作。
job.kill() # 釋放整個叢集
job.tasks[i].kill() # 釋放單個執行個體
程式碼範例:強制停止並釋放一個正在啟動並執行執行個體。
# 強制釋放叢集以及叢集中的執行個體,即使執行個體處於Running狀態
job.kill(force=True)
# 釋放單個執行個體,此執行個體應處於停機狀態
job.tasks[i].kill()
上述運行命令的參數說明如下:
參數名稱 | 參數描述 | 參數樣本 |
force | 是否強制停止。 預設值為False,即無法釋放正在運行中的執行個體。 | 設定強制停止,即
|