生成數據智能

利用 Amazon SageMaker Studio 本機模式和 Docker 支援加速 ML 工作流程 |亞馬遜網路服務

日期:

我們很高興地宣布兩項新功能 亞馬遜SageMaker Studio 這將加速機器學習 (ML) 從業者的迭代開發:本機模式和 Docker 支援。當開發人員在編碼、訓練和部署之間切換時,ML 模型開發通常會涉及緩慢的迭代週期。每個步驟都需要等待遠端運算資源啟動,這會延遲驗證實作和取得變更回饋。

借助本機模式,開發人員現在可以直接在 SageMaker Studio 筆記本實例上訓練和測試模型、偵錯程式碼並驗證端到端管道,而無需啟動遠端運算資源。這將迭代周期從幾分鐘縮短到幾秒鐘,從而提高了開發人員的工作效率。 SageMaker Studio 筆記本中的 Docker 支援可讓開發人員輕鬆建置 Docker 容器並存取預先建置的容器,從而在整個團隊中提供一致的開發環境,並避免耗時的設定和依賴項管理。

本機模式和 Docker 支援提供了簡化的工作流程,可使用在 SageMaker Studio 筆記本上執行的本機容器來驗證程式碼變更和原型模型

實例。在這篇文章中,我們將指導您在 SageMaker Studio 中設定本機模式、執行範例訓練作業以及在 亞馬遜SageMaker 來自 SageMaker Studio 筆記本的端點。

SageMaker Studio 本機模式

SageMaker Studio 引入了本機模式,讓您能夠直接在 JupyterLab、程式碼編輯器或 SageMaker Studio Classic 筆記型電腦實例上執行 SageMaker 訓練、推理、批次轉換和處理作業,而無需遠端運算資源。使用本地模式的好處包括:

  • 在整合開發環境 (IDE) 中即時驗證和測試工作流程
  • 透過本地運行更快地迭代較小規模的作業,以檢查輸出並儘早發現問題
  • 透過消除遠距培訓作業的等待,提高開發和調試效率
  • 在雲端運行完整作業之前立即反饋程式碼更改

下圖說明了在 SageMaker 上使用本機模式的工作流程。

在 SageMaker 上使用本機模式的工作流程

若要使用本機模式,請設定 instance_type='local' 執行 SageMaker Python SDK 作業(例如訓練和推理)時。這將在 SageMaker Studio IDE 使用的實例上運行它們,而不是配置雲端資源。

儘管分散式訓練等某些功能僅在雲端中可用,但本地模式無需切換上下文以進行快速迭代。當您準備好利用 SageMaker 的全部功能和規模時,您可以在雲端中無縫運行您的工作流程。

SageMaker Studio 中的 Docker 支持

SageMaker Studio 現在也支援在 SageMaker Studio 筆記型電腦實例上本機建置和執行 Docker 容器。這項新功能可讓您在 SageMaker Studio 中建置和驗證 Docker 映像,然後再將其用於 SageMaker 訓練和推理。

下圖說明了 SageMaker Studio 中的高階 Docker 編排架構。

SageMaker Studio 中的高階 Docker 編排架構

借助 SageMaker Studio 中的 Docker 支持,您可以:

  • 直接在 SageMaker Studio 中建置具有整合模型和相依性的 Docker 容器
  • 無需外部 Docker 建置流程即可簡化映像建立
  • 在將模型部署到生產環境之前,請在本機上運行容器以驗證功能
  • 部署到 SageMaker 進行訓練和託管時重複使用本地容器

儘管在撰寫本文時不支援一些進階 Docker 功能(例如多容器和自訂網路),但核心建置和運行功能可用於加速開發容器以實現自帶容器 (BYOC) 工作流程。

條件:

要在 SageMaker Studio 應用程式中使用本機模式,您必須滿足以下先決條件:

  • 用於從中提取圖像 Amazon Elastic Container註冊 (Amazon ECR),託管 ECR 映像的帳戶必須提供使用者存取權限 身份和訪問管理 (IAM)角色。該網域的角色還必須允許 Amazon ECR 存取。
  • 若要啟用本機模式和 Docker 功能,您必須設定 EnableDockerAccess 對於域的參數為 true DockerSettings 使用 AWS命令行界面 (AWS CLI)。這允許網域中的使用者使用本機模式和 Docker 功能。預設情況下,本機模式和 Docker 在 SageMaker Studio 中處於停用狀態。任何現有的 SageMaker Studio 應用程式都需要重新啟動才能使 Docker 服務更新生效。以下是用於更新 SageMaker Studio 網域的範例 AWS CLI 命令:
aws sagemaker --region <REGION> 
update-domain --domain-id <DOMAIN-ID> 
--domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:CompleteLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:InitiateLayerUpload",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage"
      ],
      "Resource": "arn:aws:ecr:us-east-2:123456789012:repository/<repositoryname>"
    },
    {
      "Effect": "Allow",
      "Action": "ecr:GetAuthorizationToken",
      "Resource": "*"
    }
  ]
}

使用本機模式在 SageMaker Studio 空間中執行 Python 文件

SageMaker Studio JupyterLab 和程式碼編輯器(基於 Code-OSS,Visual Studio Code – 開源),擴展了 SageMaker Studio,以便您可以使用流行的輕量級 IDE 編寫、測試、偵錯和運行分析和機器學習程式碼。有關如何開始使用 SageMaker Studio IDE 的更多詳細信息,請參閱 提升 Amazon SageMaker Studio 的工作效率:JupyterLab Spaces 與生成式 AI 工具簡介新功能 – 基於 Code-OSS VS Code Open Source 的程式碼編輯器現已在 Amazon SageMaker Studio 中提供. 完成以下步驟:

使用本機模式在 SageMaker Studio 空間中執行 Python 文件 使用本機模式在 SageMaker Studio 空間中執行 Python 文件

  • 建立一個新終端。  使用本機模式在 SageMaker Studio 空間中執行 Python 文件 使用本機模式在 SageMaker Studio 空間中執行 Python 文件
  • 請按照以下說明安裝 Docker CLI 和 Docker Compose 插件 GitHub回購。如果連結的命令失敗,請一次執行一個命令。

使用本機模式在 SageMaker Studio 空間中執行 Python 文件 使用本機模式在 SageMaker Studio 空間中執行 Python 文件 您必須將 SageMaker SDK 更新到最新版本。

  • pip install sagemaker -Uq 在終端。

僅對於程式碼編輯器,您需要將Python環境設定為在目前終端中運行。

  • 在程式碼編輯器中,在 “文件”菜單¸選擇 偏好設定.

使用本機模式在 SageMaker Studio 空間中執行 Python 文件

  • 搜索並選擇 終端機:在檔案目錄中執行.

使用本機模式在 SageMaker Studio 空間中執行 Python 文件

  • 在程式碼編輯器或 JupyterLab 中,打開 scikit_learn_script_mode_local_training_and_serving 文件夾並運行 scikit_learn_script_mode_local_training_and_serving.py 文件。

您可以透過選擇來運行腳本 在程式碼編輯器中或在 JupyterLab 終端機中使用 CLI。 使用本機模式在 SageMaker Studio 空間中執行 Python 文件 使用本機模式在 SageMaker Studio 空間中執行 Python 文件 您將能夠看到模型是如何在本地訓練的。然後,您將模型部署到本機 SageMaker 終端節點,並計算均方根誤差 (RMSE). 使用本機模式在 SageMaker Studio 空間中執行 Python 文件 使用本機模式在 SageMaker Studio 空間中執行 Python 文件

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

您也可以使用 SageMaker Studio Classic 中的筆記本在其上執行小規模訓練作業 CIFAR10 使用本地模式,在本地部署模型並執行推理。

設置筆記本

若要設定筆記本,請完成以下步驟:

  • 開啟 SageMaker Studio Classic 並複製以下內容 GitHub回購.

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 打開 pytorch_local_mode_cifar10.ipynb notebook in blog/pytorch_cnn_cifar10.

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 圖片選擇 PyTorch 2.1.0 Python 3.10 CPU Optimized.

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理 確認您的筆記本顯示正確的實例和內核選擇。 使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 透過選擇打開終端 啟動終端 在目前 SageMaker 映像中。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 請按照以下說明安裝 Docker CLI 和 Docker Compose 插件 GitHub回購.

由於您使用的是 SageMaker Studio Classic 中的 Docker,因此在執行命令時請刪除 sudo,因為終端機已在超級使用者下執行。對於 SageMaker Studio Classic,安裝命令取決於 SageMaker Studio 應用程式映像作業系統。例如,基於 DLC 的框架映像是基於 Ubuntu 的,其中以下指令將起作用。但是,對於基於 Debian 的映像(例如 DataScience Images),您必須遵循以下說明 GitHub回購。如果連結的命令失敗,請一次執行一個命令。您應該會看到顯示的 Docker 版本。 使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 讓終端機視窗保持開啟狀態,返回筆記本,然後開始逐個單元地運行它。

確保運行單元格 pip install -U sagemaker 因此您使用的是最新版本的 SageMaker Python SDK。

本地培訓

當您開始執行本機 SageMaker 訓練作業時,您將看到以下日誌行:

INFO:sagemaker.local.image:'Docker Compose' found using Docker CLI.
INFO:sagemaker.local.local_session:Starting training job

這表示訓練是使用 Docker 在本地運行的。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

期間請保持耐心 pytorch-training:2.1-cpu-py310 Docker 映像已拉取。由於其大小較大 (5.2 GB),因此可能需要幾分鐘的時間。

Docker 映像將儲存在 SageMaker Studio 應用程式實例的根磁碟區中,最終使用者無法存取該根磁碟區。存取 Docker 映像並與之互動的唯一方法是透過公開的 Docker API 操作。

從使用者保密的角度來看,SageMaker Studio 平台永遠不會存取或儲存使用者特定的影像。

訓練完成後,您將能夠看到以下成功日誌行:

8zlz1zbfta-sagemaker-local exited with code 0
Aborting on container exit...
Container 8zlz1zbfta-sagemaker-local  Stopping
Container 8zlz1zbfta-sagemaker-local  Stopped
INFO:sagemaker.local.image:===== Job Complete =====

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

局部推理

完成以下步驟:

  • 使用 SageMaker 本機模式部署 SageMaker 終端節點。

期間請保持耐心 pytorch-inference:2.1-cpu-py310 Docker 映像已拉取。由於其大小較大 (4.32 GB),因此可能需要幾分鐘的時間。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 使用測試映像呼叫本地部署的 SageMaker 端點。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

您將能夠看到預測的類別:青蛙、船隻、汽車和飛機:

Predicted:  frog ship  car plane

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 由於 SageMaker Local 端點仍處於運行狀態,因此導航回開啟的終端機視窗並列出正在運行的容器:

docker ps

你將能夠看到正在運行的 pytorch-inference:2.1-cpu-py310 支援 SageMaker 端點的容器。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 若要關閉 SageMaker 本機終端節點並停止正在執行的容器(因為您一次只能執行一個本機終端節點),請執行清理程式碼。

使用本地模式在 SageMaker Studio Classic 中模擬訓練和推理

  • 若要確保 Docker 容器已關閉,您可以導覽至開啟的終端窗口,執行 docker ps,並確保沒有正在運行的容器。
  • 如果您看到容器正在運行,請運行 docker stop <CONTAINER_ID> 阻止它。

使用 SageMaker 本地模式的提示

如果您是第一次使用 SageMaker,請參閱 訓練機器學習模型。要了解有關使用 SageMaker 部署推理模型的更多信息,請參閱 部署模型進行推理.

請記住以下建議:

  • 列印輸入和輸出檔案和資料夾以了解資料集和模型加載
  • 使用 1-2 個 epoch 和小資料集進行快速測試
  • 在 Dockerfile 中預先安裝依賴項以優化環境設置
  • 隔離端點中的序列化程式碼以進行調試

將 Docker 安裝配置為生命週期配置

您可以將 Docker 安裝程序定義為生命週期配置 (LCC) 腳本,以簡化每次新 SageMaker Studio 空間啟動時的設定。 LCC 是 SageMaker 在空間建立等事件期間執行的腳本。請參閱 Jupyter實驗室, 代碼編輯器, 或者 SageMaker Studio 經典版 LCC 設定(使用 docker安裝cli 作為參考)以了解更多資訊。

將 Docker 安裝配置為生命週期配置

將 Docker 安裝配置為生命週期配置

在 SageMaker Studio 空間中建置和測試自訂 Docker 映像

在此步驟中,您將在 JupyterLab(或程式碼編輯器)應用程式空間內安裝 Docker,並使用 Docker 透過 SageMaker Studio 空間建置、測試和發布自訂 Docker 映像。空間用於管理某些 SageMaker Studio 應用程式的儲存和資源需求。每個空間與應用程式的實例具有 1:1 的關係。創建的每個受支援的應用程式都有自己的空間。要了解有關 SageMaker 空間的更多信息,請參閱 提升 Amazon SageMaker Studio 的工作效率:JupyterLab Spaces 與生成式 AI 工具簡介。確保配置至少具有 30 GB 儲存空間的新空間,以便為 Docker 映像和工件提供足夠的儲存空間。

在空間內安裝 Docker

若要在 JupyterLab 空間中安裝 Docker CLI 和 Docker Compose 插件,請執行下列命令 GitHub回購。 SageMaker工作室 僅支援 Docker 版本 20.10.X.

建置 Docker 映像

若要確認 Docker 已安裝並在 JupyterLab 空間內運行,請執行以下程式碼:

# to verify docker service
sagemaker-user@default:~$ docker version
Client: Docker Engine - Community
Version:           24.0.7
API version:       1.41 (downgraded from 1.43)
Go version:        go1.20.10
Git commit:        afdd53b
Built:             Thu Oct 26 09:07:41 2023
OS/Arch:           linux/amd64
Context:           default

Server:
Engine:
Version:          20.10.25
API version:      1.41 (minimum version 1.12)
Go version:       go1.20.10
Git commit:       5df983c
Built:            Fri Oct 13 22:46:59 2023
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.7.2
GitCommit:        0cae528dd6cb557f7201036e9f43420650207b58
runc:
Version:          1.1.7
GitCommit:        f19387a6bec4944c770f7668ab51c4348d9c2f38
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

若要在 JupyterLab(或程式碼編輯器)空間內建置自訂 Docker 映像,請完成下列步驟:

  • 建立一個空的 Dockerfile:

touch Dockerfile

  • 使用下列命令編輯 Dockerfile,從託管的基礎 python:3.10.13-bullseye 映像建立一個簡單的 Flask Web 伺服器映像 Docker中心:
# Use the specified Python base image
FROM python:3.10.13-bullseye

# Create a code dir
RUN mkdir /code/

# Set the working directory in the container
WORKDIR /code

# Upgrade pip and install required packages
RUN python3 -m pip install --upgrade pip && 
python3 -m pip install flask

# Copy the app.py file to the container
COPY app.py /code/

# Set the command to run the app
ENTRYPOINT ["python", "app.py"]

以下程式碼顯示了範例 Flask 應用程式檔案的內容 app.py:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def hello():
return jsonify({"response": "Hello"})

if __name__ == '__main__':
app.run(host='0.0.0.0', port=6006)

此外,您可以更新參考 Dockerfile 命令以包含您選擇的套件和工件。

  • 使用參考 Dockerfile 建立 Docker 映像:

docker build --network sagemaker --tag myflaskapp:v1 --file ./Dockerfile .

包括 --network sagemaker 在 docker build 指令中,否則建置將會失敗。容器無法在 Docker 預設網橋或自訂 Docker 網路中運作。容器與 SageMaker Studio 應用程式容器在同一網路中運作。使用者只能使用 sagemaker 作為網路名稱。

  • 建置完成後,驗證映像是否存在。將建置重新標記為 ECR 映像並推送。如果遇到權限問題,請執行 aws ecr get-login-password... 指令並嘗試重新執行 Docker 推/拉:
sagemaker-user@default:~$ docker image list
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
myflaskapp      v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ docker tag myflaskapp:v1 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED          SIZE
123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp     latest    d623f1538f20   27 minutes ago   489MB
myflaskapp                                                  v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

sagemaker-user@default:~$ docker push 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:latest

測試 Docker 映像

在 JupyterLab(或程式碼編輯器)SageMaker Studio 空間中安裝 Docker,您可以將預先建置或自訂 Docker 映像作為容器(或容器化應用程式)進行測試。在本部分中,我們使用 docker run 指令在 SageMaker Studio 空間內設定 Docker 容器,以測試 REST Web 服務和 Python 腳本等容器化工作負載。完成以下步驟:

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED       SIZE

  • 如果測試映像不存在,請執行 docker pull 將映像拉取到本機:

sagemaker-user@default:~$ docker pull 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

  • 如果遇到身份驗證問題,請執行以下命令:

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

  • 建立一個容器來測試您的工作負載:

docker run --network sagemaker 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

這將啟動一個新的容器實例並運行使用 Docker 的 ENTRYPOINT 定義的應用程式:

sagemaker-user@default:~$ docker run --network sagemaker 905418447590.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:6006
* Running on http://169.255.255.2:6006

  • 若要測試您的 Web 端點是否處於作用中狀態,請導覽至 URL https://<sagemaker-space-id>.studio.us-east-2.sagemaker.aws/jupyterlab/default/proxy/6006/.

您應該會看到類似於以下螢幕截圖的 JSON 回應。

將 Docker 安裝配置為生命週期配置

清理

為了避免產生不必要的費用,請刪除您在執行本文中的範例時所建立的資源:

  1. 在您的 SageMaker Studio 網域中,選擇 經典工作室 在導航窗格中,然後選擇 停止.
  2. 在您的 SageMaker Studio 網域中,選擇 Jupyter實驗室 or 代碼編輯器 在導覽窗格中,選擇您的應用程序,然後選擇 停止.

結論

SageMaker Studio 本機模式和 Docker 支援使開發人員能夠在不離開工作空間的情況下更快地建置、測試和迭代 ML 實作。透過提供對測試環境和輸出的即時訪問,這些功能優化了工作流程並提高了生產力。使用我們的試用 SageMaker Studio 本機模型和 Docker 支持 快速板載功能,它允許您在幾分鐘內為單一使用者啟動一個新網域。 在評論部分分享你的想法!


關於作者

施韋塔·辛格施韋塔·辛格 是 AWS Amazon SageMaker 機器學習 (ML) 平台團隊的高級產品經理,負責領導 SageMaker Python SDK。她在亞馬遜擔任過多個產品職位超過 5 年。她擁有紐約大學電腦工程理學士學位和金融工程理學碩士學位

埃坦·塞拉(Eitan Sela)埃坦·塞拉(Eitan Sela) 是 AWS 的生成式 AI 和機器學習專家解決方案架構師。他與 AWS 客戶合作,提供指導和技術援助,幫助他們在 AWS 上建立和營運生成式 AI 和機器學習解決方案。在空閒時間,Eitan 喜歡慢跑和閱讀最新的機器學習文章。

普拉納夫·穆爾蒂普拉納夫·穆爾蒂 是 AWS 的 AI/ML 專家解決方案架構師。 他專注於幫助客戶建置、訓練、部署機器學習 (ML) 工作負載並將其遷移到 SageMaker。 他之前曾在半導體行業工作,開發大型電腦視覺 (CV) 和自然語言處理 (NLP) 模型,以使用最先進的 ML 技術改進半導體製程。 空閒時間,他喜歡下棋和旅行。 您可以在以下位置找到普拉納夫: LinkedIn.

穆法達爾·羅哈瓦拉穆法達爾·羅哈瓦拉 是 AWS 的軟體工程師。他負責 Amazon SageMaker 的 SageMaker Python SDK 函式庫。業餘時間,他喜歡旅行、戶外活動,是足球迷。

現貨圖片

最新情報

現貨圖片

和我們線上諮詢

你好呀!我怎麼幫你?