全部產品
Search
文件中心

Elastic GPU Service:Python SDK使用說明

更新時間:Aug 23, 2024

您可以通過FastGPU提供的Python介面,將FastGPU整合到您的人工智慧訓練或推理指令碼中,從而快速地實現雲上部署和資源管理。本文為您介紹FastGPU的Python SDK相關使用說明。

前提條件

  • 用戶端已安裝Python 3.6或以上版本。

    說明

    您的ECS執行個體、本地機器、阿里雲Cloud Shell工具等均可以作為用戶端安裝FastGPU來構建人工智慧計算任務。

  • 已擷取阿里雲存取金鑰(AccessKey)。更多資訊,請參見建立AccessKey

環境準備

  1. 執行以下命令,安裝FastGPU軟體包。

    pip3 install --force-reinstall https://ali-perseus-release.oss-cn-huhehaote.aliyuncs.com/fastgpu/fastgpu-1.1.5-py3-none-any.whl
  2. 執行以下命令,配置環境變數。

    配置環境變數時,需要您提前在您的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  # (選填)填入您希望使用的地區的可用性區域
  3. 執行以下命令,在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,即

name="fastgpu_test"

instance_type

執行個體類型。

您可以使用命令列fastgpu querygpu查詢GPU執行個體規格,更多資訊,請參見GPU執行個體規格類型系列

指定執行個體類型為單卡V100機型,即

instance_type="ecs.gn6v-c8g1.2xlarge"

num_tasks

建立執行個體的數量。

預設值:1。

指定建立一個執行個體,即

num_tasks=1

install_script

執行個體初始化指令碼。

預設值:空。表示不執行任何命令。

初始化完成後,啟動SSH服務,即

install_script="systemctl start sshd"

image_name

執行個體鏡像名稱。

預設值:空。表示將會自動使用Alibaba Cloud Linux 2.1903作為預設鏡像。

更多鏡像名稱可通過命令列fastgpu queryimage進行查詢。

指定鏡像名稱為CentOS,即

image_name="centos_8_5_x64_20G_alibase_202111129.vhd"

image_type

執行個體鏡像類型。

您可以將參數指定為作業系統類型"aliyun"/"ubuntu"/"centos",也可以指定系統版本,例如"ubuntu_18_04"/"centos_7_9"

設定鏡像類型為ubuntu 16.04,即

image_type="ubuntu_16_04"

disk_size

設定資料盤大小。

預設值:500,單位:GB。

設定資料盤大小為500 GB,即

disk_size=500

spot

是否為搶佔式執行個體。

預設值:False。

設定為搶佔式執行個體,即

spot=True

confirm_cost

確認是否跳過消費警告。

預設值為False,即不跳過消費警告,建立執行個體過程中會彈出輸入確認項。

設定跳過消費警告,即

confirm_cost=True

install_cuda

設定是否為GPU自動安裝驅動。

預設值為False,即不安裝驅動。

設定為GPU自動安裝驅動,即

install_cuda=True

mount_nas

設定是否自動掛載NAS盤。

更多資訊,請參見什麼是Apsara File Storage NAS

設定自動掛載NAS盤,即

mount_nas=True

傳回值:返回一個Job對象,代表一個執行個體叢集,執行個體叢集可以通過訪問Tasks成員訪問到具體單個執行個體。job可以包含若干Task,關係如下圖所示:

job

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,即不以管理員權限運行。

設定以管理員權限運行,即

sudo=True

non_blocking

是否非阻塞運行命令。

預設值為False,即執行過程中等待直到執行完成。

設定非阻塞執行,即

non_blocking=True

ignore_errors

是否忽略報錯。

預設值為False,即執行遇到異常則終止程式,報錯時會顯示異常。

設定忽略執行報錯,即

ignore_errors=True

max_wait_sec

最大逾時時間,單位:秒。

預設值:365*24*3600(1年)。

設定最大逾時時間為1小時,即

max_wait_sec=3600

show

運行結束後是否輸出結果。

預設值為False。

設定運行後輸出結果,即

show=True

show_realtime

是否即時輸出運行結果。

預設值為False。

設定即時輸出顯示,即

show_realtime=True

程式碼範例:

# 叢集運行 "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,即不計費。

設定停止後仍計費,即

keep=True

force

是否強制停止。

預設值為False,表示不強制停止,遇到無法退出的程式可能阻塞。

設定強制停止,即

force=True

釋放執行個體

永久刪除叢集或執行個體,釋放執行個體佔用的資源。

重要

執行個體釋放後,執行個體ID、固定公網IP、系統硬碟、設定隨執行個體釋放的資料盤等資料和資源將隨之釋放且不可恢複,EIP、設定不隨執行個體釋放的資料盤等獨立的資源將自動解除綁定。請謹慎執行釋放操作。

job.kill()          # 釋放整個叢集
job.tasks[i].kill() # 釋放單個執行個體

程式碼範例:強制停止並釋放一個正在啟動並執行執行個體。

# 強制釋放叢集以及叢集中的執行個體,即使執行個體處於Running狀態
job.kill(force=True)
# 釋放單個執行個體,此執行個體應處於停機狀態
job.tasks[i].kill()

上述運行命令的參數說明如下:

參數名稱

參數描述

參數樣本

force

是否強制停止。

預設值為False,即無法釋放正在運行中的執行個體。

設定強制停止,即

force=True