

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 推論容器的模型撰寫準則
<a name="inference-model-guidelines"></a>

本節詳細說明模型提供者在為 Clean Rooms ML 建立推論演算法時應遵循的準則。
+ 使用適當的 SageMaker AI 推論支援的容器基礎映像，如 [SageMaker AI 開發人員指南](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)中所述。下列程式碼可讓您從公有 SageMaker AI 端點提取支援的容器基礎映像。

  ```
  ecr_registry_endpoint='763104351884.dkr.ecr.$REGION.amazonaws.com'
  base_image='pytorch-inference:2.3.0-cpu-py311-ubuntu20.04-sagemaker'
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ecr_registry_endpoint
  docker pull $ecr_registry_endpoint/$base_image
  ```
+ 在本機編寫模型時，請確保下列事項，以便您可以在本機、開發執行個體、 中的 SageMaker AI Batch Transform AWS 帳戶和 Clean Rooms ML 上測試模型。
  + Clean Rooms ML 透過 Docker 容器中的 `/opt/ml/model`目錄，讓您的推論模型成品可供推論程式碼使用。
  + Clean Rooms ML 會依行分割輸入、使用`MultiRecord`批次策略，並在每個轉換的記錄結尾新增換行字元。
  + 確保您能夠根據模型程式碼中使用的協作者結構描述產生合成或測試推論資料集。
  + 在建立模型演算法與協同合作的 AWS Clean Rooms 關聯 AWS 帳戶 之前，請確定您可以自行執行 SageMaker AI 批次轉換任務。

    下列程式碼包含與本機測試、SageMaker AI 轉換環境測試和 Clean Rooms ML 相容的範例 Docker 檔案

    ```
    FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:1.12.1-cpu-py38-ubuntu20.04-sagemaker
    
    ENV PYTHONUNBUFFERED=1
    
    COPY serve.py /opt/ml/code/serve.py
    COPY inference_handler.py /opt/ml/code/inference_handler.py
    COPY handler_service.py /opt/ml/code/handler_service.py
    COPY model.py /opt/ml/code/model.py
    
    RUN chmod +x /opt/ml/code/serve.py
    
    ENTRYPOINT ["/opt/ml/code/serve.py"]
    ```
+ 完成任何模型變更，並準備好在 SageMaker AI 環境中進行測試後，請依提供的順序執行下列命令。

  ```
  export ACCOUNT_ID=xxx
  export REPO_NAME=xxx
  export REPO_TAG=xxx
  export REGION=xxx
  
  docker build -t $ACCOUNT_ID.dkr.ecr.us-west-2.amazonaws.com/$REPO_NAME:$REPO_TAG
  
  # Sign into AWS $ACCOUNT_ID/ Run aws configure
  # Check the account and make sure it is the correct role/credentials
  aws sts get-caller-identity
  aws ecr create-repository --repository-name $REPO_NAME --region $REGION
  aws ecr describe-repositories --repository-name $REPO_NAME --region $REGION
  
  # Authenticate Docker
  aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
  
  # Push To ECR Repository
  docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com$REPO_NAME:$REPO_TAG
  
  # Create Sagemaker Model
  # Configure the create_model.json with
  # 1. Primary container - 
      # a. ModelDataUrl - S3 Uri of the model.tar from your training job
  aws sagemaker create-model --cli-input-json file://create_model.json --region $REGION
  
  # Create Sagemaker Transform Job
  # Configure the transform_job.json with
  # 1. Model created in the step above 
  # 2. MultiRecord batch strategy
  # 3. Line SplitType for TransformInput
  # 4. AssembleWith Line for TransformOutput
  aws sagemaker create-transform-job --cli-input-json file://transform_job.json --region $REGION
  ```

  在 SageMaker AI 任務完成且您對批次轉換感到滿意之後，您就可以向 AWS Clean Rooms ML 註冊 Amazon ECR 登錄檔。使用 `CreateConfiguredModelAlgorithm`動作來註冊模型演算法，並使用 `CreateConfiguredModelAlgorithmAssociation` 將其與協同合作建立關聯。