您可以通過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盤。 更多信息,請參見什么是文件存儲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,即無法釋放正在運行中的實例。 | 設置強制停止,即
|