

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

# Machine Learning 架構和語言
<a name="frameworks"></a>

Amazon SageMaker AI 為熱門程式設計語言和機器學習架構提供原生支援，讓開發人員和資料科學家能夠利用他們偏好的工具和技術。本節提供使用 Python 和 R 以及 SageMaker AI 內其各自軟體開發套件 (SDK) 的參考。此外，它涵蓋了各種機器學習和深度學習架構，包括 Apache MXNet、PyTorch、TensorFlow。

您可以使用 Amazon SageMaker 筆記本核心本身的 Python 和 R。也有一些核心支援特定架構。一種開始使用 SageMaker AI 的非常熱門方式是使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)。其提供開放原始碼 Python API 和容器，讓您在 SageMaker AI 中輕鬆訓練和部署模型，還有範例可與幾種不同的機器學習和深度學習架構搭配使用。

如需使用特定架構或如何在 SageMaker AI 中使用 R 的相關資訊，請參閱下列主題。

語言開發套件和使用者指南：
+ [使用 Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)
+ [R](r-guide.md)
+ [API 參考](api-and-sdk-reference.md)

機器學習和深度學習架構指南：
+ [Apache MXNet](mxnet.md)
+ [Apache Spark](apache-spark.md)
+ [Chainer](chainer.md)
+ [Hugging Face](hugging-face.md)
+ [PyTorch](pytorch.md)
+ [Scikit-learn](sklearn.md)
+ [SparkML Serving](sparkml-serving.md)
+ [TensorFlow](tf.md)
+ [Triton 推論服務器](triton.md)

# 使用 Apache MXNet 搭配 Amazon SageMaker AI 的資源
<a name="mxnet"></a>

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) MXNet 估算器和模型，以及 SageMaker 開放原始碼 MXNet 容器，可讓撰寫 MXNet 指令碼及在 SageMaker 中執行該指令碼更為輕鬆。下一節提供參考資料，您可以用來了解如何使用 SageMaker AI 搭配自訂 MXNet 程式碼來訓練和部署模型。

## 您想要做什麼？
<a name="mxnet-intent"></a>

我想要在 SageMaker AI 中訓練自訂 MXNet 模型。  
如需文件，請參閱[使用 MXNet 訓練模型](https://sagemaker.readthedocs.io/en/stable/using_mxnet.html#train-a-model-with-mxnet)。

我有已在 SageMaker AI 中訓練的 MXNet 模型，而且想要將其部署到託管端點。  
有關詳細資訊，請參閱[部署 MxNet 模型](https://sagemaker.readthedocs.io/en/stable/using_mxnet.html#deploy-mxnet-models)。

我有已在 SageMaker AI 外訓練的 MXNet 模型，而且想要將其部署到 SageMaker AI 端點  
如需詳細資訊，請參閱[從模型資料部署端點](https://sagemaker.readthedocs.io/en/stable/using_mxnet.html#deploy-endpoints-from-model-data)。

我想要參閱[ Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) MXNet 類別的 API 文件。  
如需詳細資訊，請參閱[ MXNet 類別](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html)。

我想要尋找 SageMaker AI MXNet 容器儲存庫。  
如需詳細資訊，請參閱 [SageMaker AI MxNet 容器 GitHub](https://github.com/aws/sagemaker-mxnet-container)。

我想要尋找 AWS 深度學習容器支援之 MXNet 版本的相關資訊。  
有關詳細資訊，請參閱[可用的深度學習容器映像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。

 如需有關撰寫 MXNet 指令碼模式訓練指令碼，以及使用 MXNet 指令碼模式估算器和模型搭配 SageMaker AI 的一般資訊，請參閱[使用 MXNet 搭配 SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/using_mxnet.html)。

# Apache Spark 搭配 Amazon SageMaker AI
<a name="apache-spark"></a>

Amazon SageMaker AI Spark 是開放原始碼 Spark 程式庫，可協助您使用 SageMaker AI 建置 Spark 機器學習 (ML) 管道。這簡化了 Spark ML 階段與 SageMaker AI 階段的整合，例如模型訓練和託管。如需 SageMaker AI Spark 的相關資訊，請參閱 [SageMaker AI Spark](https://github.com/aws/sagemaker-spark) GitHub 儲存庫。下列主題提供資訊，讓您了解如何使用 Apache Spark 搭配 SageMaker AI。

SageMaker AI Spark 程式庫可在 Python 和 Scala 中使用。您可以使用 SageMaker AI Spark，在 Spark 叢集中使用 `org.apache.spark.sql.DataFrame` 資料框架來訓練 SageMaker AI 中的模型。模型訓練完成後，您還可以使用 SageMaker AI 託管服務來託管模型。

其餘先不論，SageMaker AI Spark 程式庫 `com.amazonaws.services.sagemaker.sparksdk` 提供下列類別：
+ `SageMakerEstimator` - 延伸 `org.apache.spark.ml.Estimator` 介面。您可以使用此估算器，在 SageMaker AI 中進行模型訓練。
+ `KMeansSageMakerEstimator`、`PCASageMakerEstimator`、和 `XGBoostSageMakerEstimator` — 延伸 `SageMakerEstimator` 類別。
+ `SageMakerModel` - 延伸 `org.apache.spark.ml.Model` 類別。您可以使用此 `SageMakerModel` 來託管模型，並在 SageMaker AI 中取得推論。

您可以從 [SageMaker AI Spark](https://github.com/aws/sagemaker-spark) GitHub 程式庫下載 Python Spark (PySpark) 和 Scala 程式庫的來源碼。

如需 SageMaker AI Spark 程式庫的安裝和範例，請參閱 [SageMaker AI Spark for Scala 範例](apache-spark-example1.md)或[使用 SageMaker AI Spark for Python (PySpark) 範例的資源](apache-spark-additional-examples.md)。

如果您在 上使用 Amazon EMR AWS 來管理 Spark 叢集，請參閱 [Apache Spark](https://aws.amazon.com/emr/features/spark/)。如需在 SageMaker AI 中使用 Amazon EMR 的詳細資訊，請參閱[使用 Amazon EMR 進行資料準備](studio-notebooks-emr-cluster.md)。

**Topics**
+ [整合 Apache Spark 應用程式與 SageMaker AI](#spark-sdk-common-process)
+ [SageMaker AI Spark for Scala 範例](apache-spark-example1.md)
+ [使用 SageMaker AI Spark for Python (PySpark) 範例的資源](apache-spark-additional-examples.md)

## 整合 Apache Spark 應用程式與 SageMaker AI
<a name="spark-sdk-common-process"></a>

以下是整合 Apache Spark 應用程式與 SageMaker AI 之步驟的高階摘要。

1. 繼續使用您熟悉的 Apache Spark 程式庫進行資料預先處理。而資料集在 Spark 叢集中，仍為 `DataFrame`。將您的資料載入至 `DataFrame`。預先處理它，以便您具有 `org.apache.spark.ml.linalg.Vector` 為 `Doubles` 的 `features` 資料欄，以及選用的 `label` 資料欄，其中具有 `Double` 類型值。

1. 使用 SageMaker AI Spark 程式庫中的估算器來訓練您的模型。例如，如果您選擇 SageMaker AI 提供的 k-means 演算法進行模型訓練，請呼叫 `KMeansSageMakerEstimator.fit` 方法。

   提供 `DataFrame`，並將其做為輸入。估算器會傳回 `SageMakerModel` 物件。
**注意**  
`SageMakerModel` 會延伸 `org.apache.spark.ml.Model`。

   `fit` 方法會執行下列作業：

   1. 將輸入 `DataFrame` 轉換為 protobuf 格式。從輸入 `DataFrame` 選取 `features` 和 `label` 欄來執行此操作。然後，它會將 protobuf 資料上傳到 Amazon S3 儲存貯體。在 SageMaker AI 中採用 protobuf 格式可提高模型訓練效率。

   1. 傳送 SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 請求，開始在 SageMaker AI 中訓練模型。模型訓練完成後，SageMaker AI 會將模型成品儲存至 S3 儲存貯體。

      SageMaker AI 擔任您為模型訓練所指定的 IAM 角色，為您執行任務。例如，它會使用該角色從 S3 儲存貯體讀取訓練資料，然後將模型成品寫入儲存貯體。

   1. 建立並傳回 `SageMakerModel` 物件。建構函式會執行下列任務，而這些任務與將模型部署至 SageMaker AI 相關。

      1. 將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) 請求傳送至 SageMaker AI。

      1. 將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) 請求傳送至 SageMaker AI。

      1. 將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) 請求傳送至 SageMaker AI，然後啟動指定的資源，並在這些資源上託管模型。

1. 您可以使用 `SageMakerModel.transform`，從 SageMaker AI 中託管的模型取得推論。

   提供具備輸入特徵的 `DataFrame` 輸入。接著，`transform` 方法會將該輸入轉換為 `DataFrame`，其將包含推論。`transform` 方法會在內部將請求傳送至 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) SageMaker API，以取得推論。`transform` 方法會將推論附加到輸入 `DataFrame`。

# SageMaker AI Spark for Scala 範例
<a name="apache-spark-example1"></a>

Amazon SageMaker AI 提供 Apache Spark AI 程式庫 ([SageMaker AI Spark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-spark-sdk))，您可以用來整合 Apache Spark 應用程式與 SageMaker AI。本主題包含範例，協助您透過 Scala 開始使用 SageMaker AI Spark。如需 SageMaker AI Apache Spark 程式庫的相關資訊，請參閱 [Apache Spark 搭配 Amazon SageMaker AI](apache-spark.md)。

**下載 Spark for Scala**

您可以從 [SageMaker AI Spark](https://github.com/aws/sagemaker-spark) GitHub 程式庫下載 Python Spark (PySpark) 和 Scala 程式庫的來源碼和範例。

如需安裝 SageMaker AI Spark 程式庫的詳細說明，請參閱 [SageMaker AI Spark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-spark-sdk)。

SageMaker AI Spark SDK for Scala 可在 Maven 中央儲存庫中取得。在您的 `pom.xml` 檔案中新增以下相依性，將 Spark 程式庫新增至專案：
+  如果您的專案是使用 Maven 建置的，請將下列項目新增至 pom.xml 檔案：

  ```
  <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>sagemaker-spark_2.11</artifactId>
      <version>spark_2.2.0-1.0</version>
  </dependency>
  ```
+ 如果您的專案依賴 Spark 2.1，請將下列項目新增至 pom.xml 檔案：

  ```
  <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>sagemaker-spark_2.11</artifactId>
      <version>spark_2.1.1-1.0</version>
  </dependency>
  ```

**Spark for Scala 範例**

本節會提供範例程式碼，其可使用 SageMaker AI 提供的 Apache Spark Scala 程式庫，在您的 Spark 叢集中使用 `DataFrame` 來訓練 SageMaker AI 中的模型。接下來是如何 [使用自訂演算法搭配 Apache Spark，在 Amazon SageMaker AI 進行模型訓練和託管](apache-spark-example1-cust-algo.md) 和 [在 Spark 管道中使用 SageMakerEstimator](apache-spark-example1-extend-pipeline.md) 的範例。

下列範例會使用 SageMaker AI 託管服務，託管產生的模型成品。如需此範例的更多詳細資訊，請參閱[入門：使用 SageMaker AI Spark SDK 在 SageMaker AI 上進行 K-Means 叢集化](https://github.com/aws/sagemaker-spark?tab=readme-ov-file#getting-started-k-means-clustering-on-sagemaker-with-sagemaker-spark-sdk)。此範例會執行下列動作：
+ 使用 `KMeansSageMakerEstimator`，擬合 (或訓練) 資料上的模型

  因為此範例使用 SageMaker AI 提供的 k-means 演算法訓練模型，所以您會使用 `KMeansSageMakerEstimator`。您可以善用來自 MNIST 資料集的手寫個位數字影像，加以訓練模型。請將該影像提供為輸入 `DataFrame`。為方便起見，SageMaker AI 會在 Amazon S3 儲存貯體中提供此資料集。

  估算器會在回應中傳回 `SageMakerModel` 物件。
+ 使用訓練過的 `SageMakerModel` 獲取推論

  若要從 SageMaker AI 託管的模型取得推論，請呼叫 `SageMakerModel.transform` 方法。您可以將 `DataFrame` 傳遞為輸入。該方法會將輸入 `DataFrame` 轉換為另一個 `DataFrame`，其將包含從模型取得的推論。

  針對指定的手寫個位數字輸入影像，推論功能會識別該影像所屬的叢集。如需詳細資訊，請參閱[K 平均數演算法](k-means.md)。

```
import org.apache.spark.sql.SparkSession
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.algorithms
import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator

val spark = SparkSession.builder.getOrCreate

// load mnist data as a dataframe from libsvm
val region = "us-east-1"
val trainingData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
val testData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")

val roleArn = "arn:aws:iam::account-id:role/rolename"

val estimator = new KMeansSageMakerEstimator(
  sagemakerRole = IAMRole(roleArn),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1)
  .setK(10).setFeatureDim(784)

// train
val model = estimator.fit(trainingData)

val transformedData = model.transform(testData)
transformedData.show
```

此範例程式碼可做到以下操作：
+ 將 MNIST 資料集從 SageMaker AI (`awsai-sparksdk-dataset`) 提供的 S3 儲存貯體載入至 Spark `DataFrame` (`mnistTrainingDataFrame`)：

  ```
  // Get a Spark session.
  
  val spark = SparkSession.builder.getOrCreate
  
  // load mnist data as a dataframe from libsvm
  val region = "us-east-1"
  val trainingData = spark.read.format("libsvm")
    .option("numFeatures", "784")
    .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
  val testData = spark.read.format("libsvm")
    .option("numFeatures", "784")
    .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")
  
  val roleArn = "arn:aws:iam::account-id:role/rolename"
  trainingData.show()
  ```

  `show` 方法會在資料框架中顯示前 20 個資料列：

  ```
  +-----+--------------------+
  |label|            features|
  +-----+--------------------+
  |  5.0|(784,[152,153,154...|
  |  0.0|(784,[127,128,129...|
  |  4.0|(784,[160,161,162...|
  |  1.0|(784,[158,159,160...|
  |  9.0|(784,[208,209,210...|
  |  2.0|(784,[155,156,157...|
  |  1.0|(784,[124,125,126...|
  |  3.0|(784,[151,152,153...|
  |  1.0|(784,[152,153,154...|
  |  4.0|(784,[134,135,161...|
  |  3.0|(784,[123,124,125...|
  |  5.0|(784,[216,217,218...|
  |  3.0|(784,[143,144,145...|
  |  6.0|(784,[72,73,74,99...|
  |  1.0|(784,[151,152,153...|
  |  7.0|(784,[211,212,213...|
  |  2.0|(784,[151,152,153...|
  |  8.0|(784,[159,160,161...|
  |  6.0|(784,[100,101,102...|
  |  9.0|(784,[209,210,211...|
  +-----+--------------------+
  only showing top 20 rows
  ```

  在每個資料列中：
  + `label` 欄位會識別影像的標籤。例如，如果手寫數字的影像為數字 5，標籤值即為 5。
  + `features` 欄位會存放 `org.apache.spark.ml.linalg.Vector` 值的向量 (`Double`)。這些值即為手寫數字的 784 特徵。(每個手寫數字的影像均為 28 x 28 像素，因此稱為 784 特徵。)
+ 建立 SageMaker AI 估算器 (`KMeansSageMakerEstimator`) 

  此估算器的 `fit` 方法會使用 SageMaker AI 提供的 k-means 演算法，以使用輸入 `DataFrame` 來訓練模型。該方法會在回應中傳回 `SageMakerModel` 物件，讓您可以獲取推論。
**注意**  
`KMeansSageMakerEstimator` 會擴充 SageMaker AI `SageMakerEstimator`，進而擴充 Apache Spark `Estimator`。

  ```
  val estimator = new KMeansSageMakerEstimator(
    sagemakerRole = IAMRole(roleArn),
    trainingInstanceType = "ml.p2.xlarge",
    trainingInstanceCount = 1,
    endpointInstanceType = "ml.c4.xlarge",
    endpointInitialInstanceCount = 1)
    .setK(10).setFeatureDim(784)
  ```

   

  建構函式參數提供用於訓練模型並在 SageMaker AI 上部署該模型的資訊：
  + `trainingInstanceType` 與 `trainingInstanceCount` - 可識別用來訓練模型的機器學習 (ML) 運算執行個體類型和數量。
  + `endpointInstanceType` - 識別在 SageMaker AI 中託管模型時要使用的 ML 運算執行個體類型。而根據預設，系統會採用一個機器學習 (ML) 運算執行個體。
  + `endpointInitialInstanceCount` - 識別最初支援端點在 SageMaker AI 託管模型的 ML 運算執行個體數量。
  + `sagemakerRole` - SageMaker AI 會擔任 IAM 角色，以代表您執行任務。以模型訓練任務為例，該參數會自 S3 讀取資料並將訓練結果 (模型成品) 寫入至 S3。
**注意**  
此範例會隱含地建立 SageMaker AI 用戶端。而您必須提供登入資料，才能建立此用戶端。API 會使用這些憑證，驗證對 SageMaker AI 的請求。例如，它會使用這些憑證驗證建立訓練任務和 API 呼叫的請求，以使用 SageMaker AI 託管服務來部署模型。
  + `KMeansSageMakerEstimator` 物件建立完成後，您即可設定下列參數，以便進行模型訓練：
    + 訓練模型期間，K 平均數演算法應該建立的叢集數量。您可以指定 10 個叢集，並以數字 0 至 9 編號各叢集。
    + 識別每個輸入影像是否皆具備 784 特徵 (每個手寫數字的影像均為 28 x 28 像素，因此稱為 784 特徵)。
+ 呼叫估算器 `fit` 方法

  ```
  // train
  val model = estimator.fit(trainingData)
  ```

  您可以將輸入 `DataFrame` 傳遞為參數。該模型會執行訓練模型將其部署至 SageMaker AI 的所有工作。如需詳細資訊，請參閱[整合 Apache Spark 應用程式與 SageMaker AI](apache-spark.md#spark-sdk-common-process)。在回應中，您會取得 `SageMakerModel` 物件，您可以將其用來從您在 SageMaker AI 中部署的模型取得推論。

  您僅需提供輸入 `DataFrame`。不需要為用來訓練模型的 K 平均數演算法指定登錄檔路徑，因為 `KMeansSageMakerEstimator` 已掌握該路徑。
+ 呼叫 `SageMakerModel.transform` 方法，從 SageMaker AI 中部署的模型取得推論。

  `transform` 方法會採用 `DataFrame` 做為輸入並進行轉換，接著傳回另一個 `DataFrame`，其將包含從模型取得的推論。

  ```
  val transformedData = model.transform(testData)
  transformedData.show
  ```

  為簡化程序，做為輸入的 `DataFrame` 會與此範例中用來訓練模型的 `transform` 方法相同。`transform` 方法會執行下列作業：
  + 將輸入 `DataFrame` 中的 `features` 欄序列化為 protobuf，並將其傳送至 SageMaker AI 端點以進行推論。
  + 將 protobuf 回應還原序列化為兩個額外欄位 (`distance_to_cluster` 與 `closest_cluster`)，而這兩個欄位會位於轉換後的 `DataFrame`。

  `show` 方法會取得輸入 `DataFrame` 前 20 個資料列中的推論：

  ```
  +-----+--------------------+-------------------+---------------+
  |label|            features|distance_to_cluster|closest_cluster|
  +-----+--------------------+-------------------+---------------+
  |  5.0|(784,[152,153,154...|  1767.897705078125|            4.0|
  |  0.0|(784,[127,128,129...|  1392.157470703125|            5.0|
  |  4.0|(784,[160,161,162...| 1671.5711669921875|            9.0|
  |  1.0|(784,[158,159,160...| 1182.6082763671875|            6.0|
  |  9.0|(784,[208,209,210...| 1390.4002685546875|            0.0|
  |  2.0|(784,[155,156,157...|  1713.988037109375|            1.0|
  |  1.0|(784,[124,125,126...| 1246.3016357421875|            2.0|
  |  3.0|(784,[151,152,153...|  1753.229248046875|            4.0|
  |  1.0|(784,[152,153,154...|  978.8394165039062|            2.0|
  |  4.0|(784,[134,135,161...|  1623.176513671875|            3.0|
  |  3.0|(784,[123,124,125...|  1533.863525390625|            4.0|
  |  5.0|(784,[216,217,218...|  1469.357177734375|            6.0|
  |  3.0|(784,[143,144,145...|  1736.765869140625|            4.0|
  |  6.0|(784,[72,73,74,99...|   1473.69384765625|            8.0|
  |  1.0|(784,[151,152,153...|    944.88720703125|            2.0|
  |  7.0|(784,[211,212,213...| 1285.9071044921875|            3.0|
  |  2.0|(784,[151,152,153...| 1635.0125732421875|            1.0|
  |  8.0|(784,[159,160,161...| 1436.3162841796875|            6.0|
  |  6.0|(784,[100,101,102...| 1499.7366943359375|            7.0|
  |  9.0|(784,[209,210,211...| 1364.6319580078125|            6.0|
  +-----+--------------------+-------------------+---------------+
  ```

  您即可解譯資料，如下所示：
  + `label` 為 5 的手寫數字屬於叢集 4 (`closest_cluster`)。
  + `label` 為 0 的手寫數字屬於叢集 5。
  + `label` 為 4 的手寫數字屬於叢集 9。
  + `label` 為 1 的手寫數字屬於叢集 6。

**Topics**
+ [使用自訂演算法搭配 Apache Spark，在 Amazon SageMaker AI 進行模型訓練和託管](apache-spark-example1-cust-algo.md)
+ [在 Spark 管道中使用 SageMakerEstimator](apache-spark-example1-extend-pipeline.md)

# 使用自訂演算法搭配 Apache Spark，在 Amazon SageMaker AI 進行模型訓練和託管
<a name="apache-spark-example1-cust-algo"></a>

在 [SageMaker AI Spark for Scala 範例](apache-spark-example1.md)，您會使用 `kMeansSageMakerEstimator`，因為該範例會使用 Amazon SageMaker AI 提供的 k-means 演算法進行模型訓練。不過，您也可以選擇使用專屬的自訂演算法來訓練模型。假設您已建立 Docker 影像，就可以建立您專屬的 `SageMakerEstimator`，並指定自訂影像的 Amazon Elastic Container Registry 路徑。

以下範例會說明從 `SageMakerEstimator` 建立 `KMeansSageMakerEstimator` 的方式。請在新的估算器中明確地指定 Docker 登錄檔路徑，以便訓練和推論程式碼影像。

```
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.SageMakerEstimator
import com.amazonaws.services.sagemaker.sparksdk.transformation.serializers.ProtobufRequestRowSerializer
import com.amazonaws.services.sagemaker.sparksdk.transformation.deserializers.KMeansProtobufResponseRowDeserializer

val estimator = new SageMakerEstimator(
  trainingImage =
    "811284229777.dkr.ecr.us-east-1.amazonaws.com/kmeans:1",
  modelImage =
    "811284229777.dkr.ecr.us-east-1.amazonaws.com/kmeans:1",
  requestRowSerializer = new ProtobufRequestRowSerializer(),
  responseRowDeserializer = new KMeansProtobufResponseRowDeserializer(),
  hyperParameters = Map("k" -> "10", "feature_dim" -> "784"),
  sagemakerRole = IAMRole(roleArn),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1,
  trainingSparkDataFormat = "sagemaker")
```

`SageMakerEstimator` 建構函式中的參數會包含以下程式碼：
+ `trainingImage` - 可識別訓練影像的 Docker 登錄檔路徑，該訓練影像包含自訂程式碼。
+ `modelImage` - 可識別影像的 Docker 登錄檔路徑，該影像包含推論程式碼。
+ `requestRowSerializer` - 實作 `com.amazonaws.services.sagemaker.sparksdk.transformation.RequestRowSerializer`。

  此參數會序列化輸入 `DataFrame` 中的資料列，以將它們傳送至 SageMaker AI 中託管的模型進行推論。
+ `responseRowDeserializer` - 實作 

  `com.amazonaws.services.sagemaker.sparksdk.transformation.ResponseRowDeserializer`.

  此參數會還原序列化來自模型 (託管於 SageMaker AI) 的回應，回到 `DataFrame`。
+ `trainingSparkDataFormat` - 可指定 `DataFrame` 訓練資料上傳至 S3 期間，Spark 會使用的資料格式。例如，`"sagemaker"` 適用於 protobuf 格式、`"csv"` 適用於逗號分隔值，而 `"libsvm"` 適用於 LibSVM 格式。

您可以實作專屬的 `RequestRowSerializer` 和 `ResponseRowDeserializer`，將使用您推論程式碼支援之資料格式 (如 libsvm 或 .csv) 的資料列序列化及還原序列化。

# 在 Spark 管道中使用 SageMakerEstimator
<a name="apache-spark-example1-extend-pipeline"></a>

您可以使用 `org.apache.spark.ml.Estimator` 管道中的 `org.apache.spark.ml.Model` 估算器、`SageMakerEstimator` 模型、`SageMakerModel` 估算器與 `org.apache.spark.ml.Pipeline` 模型，如下列範例所示：

```
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.feature.PCA
import org.apache.spark.sql.SparkSession
import com.amazonaws.services.sagemaker.sparksdk.IAMRole
import com.amazonaws.services.sagemaker.sparksdk.algorithms
import com.amazonaws.services.sagemaker.sparksdk.algorithms.KMeansSageMakerEstimator

val spark = SparkSession.builder.getOrCreate

// load mnist data as a dataframe from libsvm
val region = "us-east-1"
val trainingData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/train/")
val testData = spark.read.format("libsvm")
  .option("numFeatures", "784")
  .load(s"s3://sagemaker-sample-data-$region/spark/mnist/test/")

// substitute your SageMaker IAM role here
val roleArn = "arn:aws:iam::account-id:role/rolename"

val pcaEstimator = new PCA()
  .setInputCol("features")
  .setOutputCol("projectedFeatures")
  .setK(50)

val kMeansSageMakerEstimator = new KMeansSageMakerEstimator(
  sagemakerRole = IAMRole(integTestingRole),
  requestRowSerializer =
    new ProtobufRequestRowSerializer(featuresColumnName = "projectedFeatures"),
  trainingSparkDataFormatOptions = Map("featuresColumnName" -> "projectedFeatures"),
  trainingInstanceType = "ml.p2.xlarge",
  trainingInstanceCount = 1,
  endpointInstanceType = "ml.c4.xlarge",
  endpointInitialInstanceCount = 1)
  .setK(10).setFeatureDim(50)

val pipeline = new Pipeline().setStages(Array(pcaEstimator, kMeansSageMakerEstimator))

// train
val pipelineModel = pipeline.fit(trainingData)

val transformedData = pipelineModel.transform(testData)
transformedData.show()
```

參數 `trainingSparkDataFormatOptions` 會設定 Spark，並將採用 protobuf 格式的 “projectedFeatures” 欄位序列化，以進行模型訓練。此外，依據預設，Spark 會將採用 protobuf 格式的 “label” 欄位序列化。

由於我們想透過 “projectedFeatures” 欄位進行推論，因此會將欄位名稱傳遞至 `ProtobufRequestRowSerializer`。

轉換後的 `DataFrame` 如下列範例所示：

```
+-----+--------------------+--------------------+-------------------+---------------+
|label|            features|   projectedFeatures|distance_to_cluster|closest_cluster|
+-----+--------------------+--------------------+-------------------+---------------+
|  5.0|(784,[152,153,154...|[880.731433034386...|     1500.470703125|            0.0|
|  0.0|(784,[127,128,129...|[1768.51722024166...|      1142.18359375|            4.0|
|  4.0|(784,[160,161,162...|[704.949236329314...|  1386.246826171875|            9.0|
|  1.0|(784,[158,159,160...|[-42.328192193771...| 1277.0736083984375|            5.0|
|  9.0|(784,[208,209,210...|[374.043902028333...|   1211.00927734375|            3.0|
|  2.0|(784,[155,156,157...|[941.267714528850...|  1496.157958984375|            8.0|
|  1.0|(784,[124,125,126...|[30.2848596410594...| 1327.6766357421875|            5.0|
|  3.0|(784,[151,152,153...|[1270.14374062052...| 1570.7674560546875|            0.0|
|  1.0|(784,[152,153,154...|[-112.10792566485...|     1037.568359375|            5.0|
|  4.0|(784,[134,135,161...|[452.068280676606...| 1165.1236572265625|            3.0|
|  3.0|(784,[123,124,125...|[610.596447285397...|  1325.953369140625|            7.0|
|  5.0|(784,[216,217,218...|[142.959601818422...| 1353.4930419921875|            5.0|
|  3.0|(784,[143,144,145...|[1036.71862533658...| 1460.4315185546875|            7.0|
|  6.0|(784,[72,73,74,99...|[996.740157435754...| 1159.8631591796875|            2.0|
|  1.0|(784,[151,152,153...|[-107.26076167417...|   960.963623046875|            5.0|
|  7.0|(784,[211,212,213...|[619.771820430940...|   1245.13623046875|            6.0|
|  2.0|(784,[151,152,153...|[850.152101817161...|  1304.437744140625|            8.0|
|  8.0|(784,[159,160,161...|[370.041887230547...| 1192.4781494140625|            0.0|
|  6.0|(784,[100,101,102...|[546.674328209335...|    1277.0908203125|            2.0|
|  9.0|(784,[209,210,211...|[-29.259112927426...| 1245.8182373046875|            6.0|
+-----+--------------------+--------------------+-------------------+---------------+
```

# 使用 SageMaker AI Spark for Python (PySpark) 範例的資源
<a name="apache-spark-additional-examples"></a>

Amazon SageMaker AI 會提供 Apache Spark Python 程式庫 ([SageMaker AI PySpark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-pyspark-sdk))，您可以將其用來整合 Apache Spark 應用程式與 SageMaker AI。本主題包含協助您開始使用 PySpark 的範例。如需 SageMaker AI Apache Spark 程式庫的相關資訊，請參閱 [Apache Spark 搭配 Amazon SageMaker AI](apache-spark.md)。

**下載 PySpark**

您可以從 [SageMaker AI Spark](https://github.com/aws/sagemaker-spark) GitHub 程式庫下載 Python Spark (PySpark) 和 Scala 程式庫的來源碼。

如需安裝 SageMaker AI Spark 程式庫的指示，請使用下列任何選項或造訪 [SageMaker AI PySpark](https://github.com/aws/sagemaker-spark/tree/master/sagemaker-pyspark-sdk)。
+ 使用 pip 安裝：

  ```
  pip install sagemaker_pyspark
  ```
+ 從來源安裝：

  ```
  git clone git@github.com:aws/sagemaker-spark.git
  cd sagemaker-pyspark-sdk
  python setup.py install
  ```
+ 您也可以在筆記本執行個體中建立新的筆記本，其會使用 `Sparkmagic (PySpark)` 或 `Sparkmagic (PySpark3)` 核心，並連線至遠端 Amazon EMR 叢集。
**注意**  
Amazon EMR 叢集必須以與 `AmazonSageMakerFullAccess` 政策連接的 IAM 角色設定。有關為 EMR 羣集配置角色的資訊，請參閱[為亞馬遜 EMR 權限配置 IAM 角色 AWS 服務](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html)在*亞馬遜 EMR 管理指南*。

**PySpark 範例**

如需使用 SageMaker AI PySpark 的範例，請參閱：
+ 閱讀文件中的[使用 Amazon SageMaker AI 搭配 Apache Spark](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-spark/index.html)。
+ [SageMaker AI Spark](https://github.com/aws/sagemaker-spark) GitHub 儲存庫。

# 使用 Chainer 搭配 Amazon SageMaker AI 的資源
<a name="chainer"></a>

您可以使用 SageMaker AI，以利用自訂 Chainer 程式碼訓練和部署模型。SageMaker AI Python SDK Chainer 估算器和模型以及 SageMaker AI 開放原始碼 Chainer 容器，讓撰寫 Chainer 指令碼以及在 SageMaker AI 中執行該指令碼變得更輕鬆。下節提供參考資料，您可以用來了解如何使用 Chainer 搭配 SageMaker AI。

## 您想要做什麼？
<a name="chainer-intent"></a>

我想要在 SageMaker AI 中訓練自訂 Chainer 模型。  
如需範例 Jupyter 筆記本，請參閱 Amazon SageMaker AI 範例 GitHub 儲存庫中的 [Chainer 範例筆記本](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/mxnet_mnist)。  
如需文件，請參閱[使用 Chainer 訓練模型](https://sagemaker.readthedocs.io/en/stable/using_chainer.html#train-a-model-with-chainer)。

我有已在 SageMaker AI 中訓練的 Chainer 模型，而且想要將其部署到託管端點。  
有關詳細資訊，請參閱[部署鏈接模型](https://sagemaker.readthedocs.io/en/stable/using_chainer.html#deploy-chainer-models)。

我有已在 SageMaker AI 外訓練的 Chainer 模型，而且想要將其部署到 SageMaker AI 端點  
如需詳細資訊，請參閱[從模型資料部署端點](https://sagemaker.readthedocs.io/en/stable/using_chainer.html#deploy-endpoints-from-model-data)。

我想要參閱[ Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) Chainer 類別的 API 文件。  
有關詳細資訊，請參閱[鏈接類](https://sagemaker.readthedocs.io/en/stable/sagemaker.chainer.html)。

我想要尋找 SageMaker AI Chainer 容器的相關資訊。  
如需詳細資訊，請參閱 [SageMaker AI Chainer 容器 GitHub 儲存庫](https://github.com/aws/sagemaker-chainer-container)。

 如需支援的 Chainer 版本的相關資訊，以及如需撰寫 Chainer 訓練指令碼和使用 Chainer 估算器和模型搭配 SageMaker AI 的一般相關資訊，請參閱[使用 Chainer 搭配 SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/using_chainer.html)。

# 使用 Hugging Face 搭配 Amazon SageMaker AI 的資源
<a name="hugging-face"></a>

Amazon SageMaker AI 可讓客戶在 SageMaker AI 上針對自然語言處理 (NLP) 使用 Hugging Face 模型，來訓練、微調和執行推論。您可以使用 Hugging Face 進行訓練和推論。下節提供 Hugging Face 模型的相關資訊，並包括您可以用來了解如何使用 Hugging Face 搭配 SageMaker AI 的參考資料。

此功能可透過開發 Hugging Face [AWS Deep Learning Containers](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) 獲得。這些容器包括 Hugging Face 轉換器、權杖化工具和資料集程式庫，可讓您將這些資源用於訓練和推論任務。有關可用深度學習容器圖像的清單，請參閱[可用的深度學習容器映像檔](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。這些深度學習容器映像檔會獲得維護並定期更新安全性修補程式。

若要使用 Hugging Face Deep Learning Containers 搭配 SageMaker Python SDK 進行訓練，請參閱 [Hugging Face SageMaker AI 估算器](https://sagemaker.readthedocs.io/en/stable/frameworks/huggingface/index.html)。使用 Hugging Face 估算器，您可以像使用任何其他 SageMaker AI 估算器一樣使用 Hugging Face 模型。不過，使用 SageMaker Python SDK 是選擇性的。您也可以搭配 AWS CLI 和 協調使用 Hugging Face Deep Learning Containers 適用於 Python (Boto3) 的 AWS SDK。

若要取得有關 Hugging Face 及其中可用模型的更多資訊，請參閱 [Hugging Face 文件](https://huggingface.co/)。

## 培訓
<a name="hugging-face-training"></a>

若要執行訓練，請使用 Hugging Face 提供的數千種模型中的任何一種，並透過額外訓練針對您的特定使用案例微調該模型。搭配 SageMaker AI，您可以使用標準訓練或利用 [SageMaker AI 分散式資料與模型平行化訓練](https://docs.aws.amazon.com/sagemaker/latest/dg/distributed-training.html)。

與使用自訂程式碼的其他 SageMaker 訓練任務一樣，您可以透過將指標定義傳遞至 SageMaker Python SDK 來擷取您自己的指標。如需範例，請參閱[定義訓練指標 (SageMaker Python SDK)](https://docs.aws.amazon.com/sagemaker/latest/dg/training-metrics.html#define-train-metrics-sdk)。然後，您可以使用 [CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html) 存取擷取的指標，也可以使用 [TrainingJobAnalytics](https://sagemaker.readthedocs.io/en/stable/api/training/analytics.html#sagemaker.analytics.TrainingJobAnalytics) 方法以 Pandas `DataFrame` 形式進行擷取。在訓練並微調了您的模型之後，您可以像任何其他模型一樣使用您的模型來執行推論任務。

### 如何使用 Hugging Face 估算器進行訓練
<a name="hugging-face-training-using"></a>

您可以使用 SageMaker AI Python SDK 為訓練任務執行 Hugging Face 估算器。SageMaker Python SDK 是一個開放原始碼程式庫，用於在 SageMaker AI 上訓練和部署機器學習模型。如需 Hugging Face 估算器的詳細資訊，請參閱 [SageMaker AI Python SDK 文件](https://sagemaker.readthedocs.io/en/stable/frameworks/huggingface/index.html)。

使用 SageMaker Python SDK，您可以在下列環境中使用 Hugging Face 估算器執行訓練任務：
+ [Amazon SageMaker Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html)：Studio Classic 是第一個用於機器學習 (ML) 的完全整合式開發環境 (IDE)。Studio Classic 提供單一的 Web 型視覺化介面，您可以在其中執行下列動作所需的所有 ML 開發步驟：
  + 準備
  + 組建
  + 訓練和調校
  + 部署和管理模型

  如需在 Studio Classic 中使用 Jupyter 筆記本的相關資訊，請參閱[使用 Amazon SageMaker Studio Classic 筆記本](notebooks.md)。
+ [SageMaker 筆記本執行個體](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)：Amazon SageMaker 筆記本執行個體是執行 Jupyter 筆記本應用程式的機器學習 (ML) 運算執行個體。此應用程式可讓您在筆記本執行個體中執行 Jupyter 筆記本，以：
  + 準備和處理資料
  + 編寫程式碼來訓練模型
  + 將模型部署至 SageMaker AI 託管
  + 在沒有偵錯工具、模型監控和 Web 型 IDE 等 SageMaker Studio 功能的情況下測試或驗證您的模型
+ 本機：如果您已連線至 AWS 並具有適當的 SageMaker AI 許可，則可以在本機使用 SageMaker Python SDK。透過本機使用，您可以在 AWS的 SageMaker AI 中啟動 Hugging Face 的遠端訓練和推論任務。這適用於您的本機電腦，以及其他具有連線 SageMaker Python SDK 和適當許可 AWS 的服務。

## Inference
<a name="hugging-face-inference"></a>

針對推論，您可以使用已訓練的 Hugging Face 模型或其中一個預先訓練的 Hugging Face 模型，搭配 SageMaker AI 部署推論任務。透過此協作，您只需要一行程式碼，即可透過 SageMaker AI 部署您已訓練的模型和預先訓練的模型。您也可以執行推論任務，而不必撰寫任何自訂推論程式碼。使用自訂推論程式碼，您可以提供自己的 Python 指令碼來自訂推論邏輯。

### 如何使用 Hugging Face Deep Learning Containers 部署推論任務
<a name="hugging-face-inference-using"></a>

使用 SageMaker AI 執行推論時您有兩個選項。您可以使用訓練過的模型執行推論，或部署預先訓練的 Hugging Face 模型。
+ **使用已訓練的模型執行推論**：您有兩個選項可以使用自己訓練的模型執行推論。
  + 使用您已使用現有 Hugging Face 模型搭配 SageMaker AI Hugging Face Deep Learning Containers 訓練的模型執行推論。
  + 自帶現有的 Hugging Face 模型，並使用 SageMaker AI 部署該模型。

  使用您透過 SageMaker AI Hugging Face 估算器訓練的模型執行推論時，您可以在訓練完成後立即部署模型。您也可以將已訓練的模型上傳到 Amazon S3 儲存貯體，並在稍後執行推論時擷取該模型。

  如果您自帶現有的 Hugging Face 模型，則必須將已訓練的模型上傳到 Amazon S3 儲存貯體。然後，您可以在執行推論時擷取該儲存貯體，如[部署 Hugging Face 轉換器進行推論範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/10_deploy_model_from_s3/deploy_transformer_model_from_s3.ipynb)所示。
+ **使用預先訓練的 HuggingFace 模型執行推論：**您可以使用數千種預先訓練的 Hugging Face 模型之一來執行推論任務，而無需額外訓練。若要執行推論，請從 [Hugging Face 模型](https://huggingface.co/models)清單中選取預先訓練的模型，如[部署 Hugging Face 轉換器進行推論範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/11_deploy_model_from_hf_hub/deploy_transformer_model_from_hf_hub.ipynb)所示。

## 您想要做什麼？
<a name="hugging-face-do"></a>

Hugging Face 筆記本儲存庫中的下列筆記本說明如何在各種使用案例中使用 Hugging Face Deep Learning Containers 搭配 SageMaker AI。

我想要使用 SageMaker AI 中的 Hugging Face 搭配 PyTorch 來訓練和部署文字分類模型。  
如需 Jupyter 筆記本範例，請參閱 [PyTorch 入門示範](https://github.com/huggingface/notebooks/blob/main/sagemaker/01_getting_started_pytorch/sagemaker-notebook.ipynb)。

我想要使用 SageMaker AI 中的 Hugging Face 搭配 TensorFlow 來訓練和部署文字分類模型。  
如需 Jupyter 筆記本範例，請參閱 [TensorFlow 入門範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/02_getting_started_tensorflow/sagemaker-notebook.ipynb)。

我想要使用 Hugging Face 和 SageMaker AI Distributed 搭配資料平行化，來執行分散式訓練。  
如需 Jupyter 筆記本範例，請參閱[分散式訓練範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/03_distributed_training_data_parallelism/sagemaker-notebook.ipynb)。

我想要使用 Hugging Face 和 SageMaker AI Distributed 搭配模型平行化，來執行分散式訓練。  
如需 Jupyter 筆記本範例，請參閱[模型並行性範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/04_distributed_training_model_parallelism/sagemaker-notebook.ipynb)。

我想要使用 Spot 執行個體，以使用 SageMaker AI 中的 Hugging Face 來訓練和部署模型。  
如需 Jupyter 筆記本範例，請參閱[ Spot 執行個體範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/05_spot_instances/sagemaker-notebook.ipynb)。

我想要在 SageMaker AI 中使用 Hugging Face 訓練文字分類模型時，擷取自訂指標並使用 SageMaker AI 檢查點。  
如需 Jupyter 筆記本範例，請參閱[使用自訂指標訓練範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/06_sagemaker_metrics/sagemaker-notebook.ipynb)。

我想要使用 SageMaker AI 中的 Hugging Face 來訓練分散式問答 TensorFlow 模型。  
如需 Jupyter 筆記本範例，請參閱[分散式 TensorFlow 訓練範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/07_tensorflow_distributed_training_data_parallelism/sagemaker-notebook.ipynb)。

我想要使用 SageMaker AI 中的 Hugging Face 來訓練分散式摘要模型。  
如需 Jupyter 筆記本範例，請參閱[分散式摘要訓練範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/08_distributed_summarization_bart_t5/sagemaker-notebook.ipynb)。

我想要使用 SageMaker AI 中的 Hugging Face 來訓練影像分類模型。  
如需 Jupyter 筆記本範例，請參閱[視覺轉換器訓練範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/09_image_classification_vision_transformer/sagemaker-notebook.ipynb)。

我想要在 SageMaker AI 中部署已訓練的 Hugging Face 模型。  
如需 Jupyter 筆記本範例，請參閱[部署 Hugging Face 轉換器以進行推論範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/10_deploy_model_from_s3/deploy_transformer_model_from_s3.ipynb)。

我想要在 SageMaker AI 中部署已預先訓練的 Hugging Face 模型。  
如需 Jupyter 筆記本範例，請參閱[部署預先訓練 Hugging Face 轉換器以進行推論範例](https://github.com/huggingface/notebooks/blob/main/sagemaker/11_deploy_model_from_hf_hub/deploy_transformer_model_from_hf_hub.ipynb)。

# 使用 PyTorch 搭配 Amazon SageMaker AI 的資源
<a name="pytorch"></a>

您可以使用 Amazon SageMaker AI 來訓練和部署模型，方法為使用自訂 PyTorch 程式碼。SageMaker AI Python SDK PyTorch 估算器和模型，以及 SageMaker AI 開放原始碼 PyTorch 容器，讓撰寫 PyTorch 指令碼以及在 SageMaker AI 中執行該指令碼變得更輕鬆。下節提供參考資料，您可以用來了解如何使用 PyTorch 搭配 SageMaker AI。

## 您想要做什麼？
<a name="pytorch-intent"></a>

我想要在 SageMaker AI 中訓練自訂 PyTorch 模型。  
如需範例 Jupyter 筆記本，請參 Amazon SageMaker AI 範例 GitHub 程式庫中的 [PyTorch 範例筆記本](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/pytorch_mnist)。  
如需文件 , 請參閱[使用 PyTorch 訓練模型](https://sagemaker.readthedocs.io/en/stable/using_pytorch.html#train-a-model-with-pytorch)。

我有已在 SageMaker AI 中訓練的 PyTorch 模型，而且想要將其部署到託管端點。  
如需詳細資訊，請參閱[部署 PyTorch 模型](https://sagemaker.readthedocs.io/en/stable/using_pytorch.html#deploy-pytorch-models)。

我有已在 SageMaker AI 外訓練的 PyTorch 模型，而且想要將其部署到 SageMaker AI 端點  
如需詳細資訊，請參閱[部署您自己的 PyTorch 模型](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#bring-your-own-model)。

我想要參閱[ Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) PyTorch 類別的 API 文件。  
如需詳細資訊，請參閱[ PyTorch 類別](https://sagemaker.readthedocs.io/en/stable/sagemaker.pytorch.html)。

我想要尋找 SageMaker AI PyTorch 容器儲存庫。  
如需詳細資訊，請參閱 [SageMaker AI PyTorch 容器 GitHub 儲存庫](https://github.com/aws/deep-learning-containers/tree/master/pytorch)。

我想要尋找 AWS Deep Learning Containers 支援的 PyTorch 版本相關資訊。  
有關詳細資訊，請參閱[可用的深度學習容器映像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。

 如需撰寫 PyTorch 訓練指令碼，以及使用 PyTorch 估算器和模型搭配 SageMaker AI 的一般相關資訊，請參閱[使用 PyTorch 搭配 SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/using_pytorch.html)。

# 使用 R 搭配 Amazon SageMaker AI 的資源
<a name="r-guide"></a>

本文件列出可協助您了解如何使用 Amazon SageMaker AI 特徵搭配 R 軟體環境的資源。下列各節介紹 SageMaker AI 的內建 R 核心、說明如何在 SageMaker AI 上開始使用 R，以及提供數個範例筆記本。

這些範例分為三個層級：入門、中級和進階。它們首先[在 SageMaker 上開始使用 R](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_sagemaker_hello_world/r_sagemaker_hello_world.html)，接著在 SageMaker AI 上使用 R 進行端對端機器學習，然後完成更進階的主題，例如使用 R 指令碼進行 SageMaker 處理，以及將自己的 R 演算法帶到 SageMaker AI。

如需如何自行提供 R 映像的詳細資訊，請參閱[Amazon SageMaker Studio Classic 中的自訂映像](studio-byoi.md)。如需類似的部落格文章，請參閱[將您自己的 R 環境帶到 Amazon SageMaker Studio](https://aws.amazon.com/blogs/machine-learning/bringing-your-own-r-environment-to-amazon-sagemaker-studio/)。

**Topics**
+ [SageMaker AI 中的 RStudio 支援](#rstudio-for-r)
+ [SageMaker AI 中的 R 核心](#r-sagemaker-kernel-ni)
+ [範例筆記本](#r-sagemaker-example-notebooks)
+ [在 SageMaker AI 中開始使用 R](r-sagemaker-get-started.md)

## SageMaker AI 中的 RStudio 支援
<a name="rstudio-for-r"></a>

Amazon SageMaker AI 支援 RStudio 做為與 Amazon SageMaker AI 網域整合的全受管整合式開發環境 (IDE)。透過 RStudio 整合，您可以在網域中啟動 RStudio 環境，以便在 SageMaker AI 資源上執行 RStudio 工作流程。如需詳細資訊，請參閱[RStudio on Amazon SageMaker AI](rstudio.md)。

## SageMaker AI 中的 R 核心
<a name="r-sagemaker-kernel-ni"></a>

SageMaker 筆記本執行個體使用預先安裝的 R 核心來支援 R。此外，R 核心具有網狀程式庫 (一個 R 到 Python 的介面)，因此您可以從 R 指令碼內使用 SageMaker AI Python SDK 的功能。
+ [reticulatelibrary](https://rstudio.github.io/reticulate/)：提供 R 對 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 的介面。reticulate 套件可在 R 和 Python 物件之間的轉譯。

## 範例筆記本
<a name="r-sagemaker-example-notebooks"></a>

**先決條件**
+ [在 SageMaker AI 上開始使用 R](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_sagemaker_hello_world/r_sagemaker_hello_world.html) - 此範例筆記本描述如何使用 Amazon SageMaker AI 的 R 核心開發 R 指令碼。在此筆記本中，您設定了 SageMaker AI 環境和許可、從 [UCI 機器學習儲存庫](https://archive.ics.uci.edu/datasets)下載[鮑魚資料集](https://archive.ics.uci.edu/ml/datasets/abalone)、對資料執行一些基本的處理和視覺化，然後將資料以 .csv 格式儲存至 S3。

**入門程度**
+ [使用 R 核心進行 SageMaker AI 批次轉換](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_batch_transform/r_xgboost_batch_transform.html) - 此範例筆記本描述如何使用 SageMaker AI 的轉換器 API 和 [XGBoost 演算法](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html)進行批次轉換任務。筆記本也使用鮑魚資料集。

**中級程度**
+ [XGBoost in R 的超參數最佳化](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_xgboost_hpo_batch_transform/r_xgboost_hpo_batch_transform.html) - 此範例筆記本擴充了先前使用鮑魚資料集和 XGBoost 的入門筆記本。它也描述了使用[超參數最佳化](https://sagemaker.readthedocs.io/en/stable/tuner.html)進行模型微調。您也將學習如何使用批次轉換進行批次預測，以及如何建立模型端點以進行即時預測。
+ [Amazon SageMaker Processing 搭配 R](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_in_sagemaker_processing/r_in_sagemaker_processing.html) - [SageMaker Processing](https://aws.amazon.com/blogs/aws/amazon-sagemaker-processing-fully-managed-data-processing-and-model-evaluation/) 可讓您預先處理、後續處理和執行模型評估工作負載。此範例示範如何建立 R 指令碼來協調 Processing 任務。

**進階程度**
+ [在 SageMaker AI 中訓練和部署您自己的 R 演算法](https://sagemaker-examples.readthedocs.io/en/latest/r_examples/r_byo_r_algo_hpo/tune_r_bring_your_own.html) - 您是否已有 R 演算法，而且想要將其帶入 SageMaker AI 來調整、訓練或部署該演算法？ 此範例為您示範如何使用自訂 R 套件來自訂 SageMaker AI 容器，最後在 R 原始模型上使用託管端點進行推論。

# 在 SageMaker AI 中開始使用 R
<a name="r-sagemaker-get-started"></a>

本主題說明如何在 SageMaker AI 中開始使用 R 軟體環境。如需使用 R 搭配 SageMaker AI 的詳細資訊，請參閱[使用 R 搭配 Amazon SageMaker AI 的資源](r-guide.md)。

**在 SageMaker AI 主控台中開始使用 R**

1. 使用 t2.medium 執行個體類型和預設儲存大小[建立筆記本執行個體](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-create-ws.html)。如果您打算繼續使用執行個體以取得更多進階範例，您可以挑選更快的執行個體和更多的儲存空間，或者稍後您可以建立更大的執行個體。

1. 等到筆記本的狀態為**服務中**，然後選擇**開啟 Jupyter**。  
![\[主控台中 InService 狀態和開啟 Jupyter 連結的位置。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/An-R-User-Guide-to-SageMaker/An-R-User-Guide-to-SageMaker-1.png)

1. 從可用的環境清單中，使用 R 核心建立新的筆記本。  
![\[可用環境清單中 R 核心的位置。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/An-R-User-Guide-to-SageMaker/An-R-User-Guide-to-SageMaker-2.png)

1. 建立新的筆記本時，您在筆記本環境的右上角應該會看到 R 標誌，該標誌下方也會出現以 R 為核心。這表示 SageMaker AI 已成功為此筆記本啟動 R 核心。  
![\[筆記本環境的 R 標誌和 R 核心的位置。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/An-R-User-Guide-to-SageMaker/An-R-User-Guide-to-SageMaker-3.png)

或者，當您在 Jupyter 筆記本中時，可以使用**核心**功能表，然後從**變更核心**子功能表中選取 **R**。

![\[將筆記本核心變更為 R 的位置。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/An-R-User-Guide-to-SageMaker/An-R-User-Guide-to-SageMaker-4.png)


# 使用 Scikit-learn 搭配 Amazon SageMaker AI 的資源
<a name="sklearn"></a>

您可以使用 Amazon SageMaker AI，以使用自訂 Scikit-learn 程式碼來訓練和部署模型。SageMaker AI Python SDK Scikit-learn 估算器和模型以及 SageMaker AI 開放原始碼 Scikit-learn 容器，讓撰寫 Scikit-learn 指令碼以及在 SageMaker AI 中執行該指令碼變得更輕鬆。下節提供參考資料，您可以用來了解如何使用 Scikit-learn 搭配 SageMaker AI。

**需求**

Scikit-learn 1.4 具有下列相依性。


| 相依性 | 最低版本 | 
| --- | --- | 
| Python | 3.10 | 
| NumPy | 2.1.0 | 
| SciPy | 1.15.3 | 
| joblib | 1.5.2 | 
| threadpoolctl | 3.6.0 | 

Sagemaker AI Scikit-learn 容器支援下列 Scikit-learn 版本。


| 支援的 Scikit-learn 版本 | 最低 Python 版本 | 
| --- | --- | 
| 1.4-2 | 3.10 | 
| 1.2-1 | 3.8 | 
| 1.0-1 | 3.7 | 
| 0.23-1 | 3.6 | 
| 0.20.0 | 2.7 或 3.4 | 

如需撰寫 Scikit-learn 訓練指令碼，以及使用 Scikit-learn 估算器和模型搭配 SageMaker AI 的一般資訊，請參閱[使用 Scikit-learn 搭配 SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/using_sklearn.html)。

## 您想要做什麼？
<a name="sklearn-intent"></a>

**注意**  
需要使用 Matplotlib v2.2.3 或更新版本才能執行 SageMaker AI Scikit-learn 範例筆記本。

我想要使用 Scikit-learn，在 SageMaker AI 中進行資料處理、特徵工程或模型評估。  
如需範例 Jupyter 筆記本，請參閱 [https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker\$1processing/scikit\$1learn\$1data\$1processing\$1and\$1model\$1evaluation](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation)。  
如需有關訓練和部署 Scikit-learn 模型的部落格文章，請參閱 [Amazon SageMaker AI 新增 Scikit-Learn 支援](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-adds-scikit-learn-support/)。  
如需相關文件，請參閱 [ ReadTheDocs](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_processing.html#data-pre-processing-and-model-evaluation-with-scikit-learn)。

我想要在 SageMaker AI 中訓練自訂 Scikit-learn 模型。  
如需範例 Jupyter 筆記本，請參閱 [https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/scikit\$1learn\$1iris](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/scikit_learn_iris)。  
如需文件，請參閱[使用 Scikit-learn 訓練模型](https://sagemaker.readthedocs.io/en/stable/using_sklearn.html#train-a-model-with-sklearn)。

我有已在 SageMaker AI 中訓練的 Scikit-learn 模型，而且想要將其部署到託管端點。  
如需詳細資訊，請參閱[部署 Scikit-learn 模型](https://sagemaker.readthedocs.io/en/stable/using_sklearn.html#deploy-sklearn-models)。

我有已在 SageMaker AI 外訓練的 Scikit-learn 模型，而且想要將其部署到 SageMaker AI 端點  
如需詳細資訊，請參閱[從模型資料部署端點](https://sagemaker.readthedocs.io/en/stable/using_sklearn.html#deploy-endpoints-from-model-data)。

我想要參閱[ Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) Scikit-learn 類別的 API 文件。  
如需詳細資訊，請參閱[ Scikit-learn 類別](https://sagemaker.readthedocs.io/en/stable/sagemaker.sklearn.html)。

我想要參閱 SageMaker AI Scikit-learn 容器的相關資訊。  
如需詳細資訊，請參閱 [SageMaker Scikit-learn 容器 GitHub 儲存庫](https://github.com/aws/sagemaker-scikit-learn-container)。

# 使用 SparkML Serving 搭配 Amazon SageMaker AI 的資源
<a name="sparkml-serving"></a>

[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) SparkML 服務模型和預測器以及 Amazon SageMaker AI 開放原始碼 SparkML 服務容器，支援在 SageMaker AI 中部署以 MLeap 序列化的 Apache Spark ML 管道來獲取推論。使用下列資源來了解如何使用 SparkML Serving 搭配 SageMaker AI。

如需使用 SparkML Serving 容器將模型部署至 SageMaker AI 的相關資訊，請參閱 [SageMaker Spark ML 容器 GitHub 儲存庫](https://github.com/aws/sagemaker-sparkml-serving-container)。如需 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) SparkML Serving 模型和預測器的相關資訊，請參閱 [SparkML Serving 模型和預測器 API 文件](https://sagemaker.readthedocs.io/en/stable/sagemaker.sparkml.html)。

# 使用 TensorFlow 搭配 Amazon SageMaker AI 的資源
<a name="tf"></a>

您可以使用 Amazon SageMaker AI，以使用自訂 TensorFlow 程式碼來訓練和部署模型。SageMaker AI Python SDK TensorFlow 估算器和模型，以及 SageMaker AI 開放原始碼 TensorFlow 容器可以提供協助。使用下列資源清單，根據您正在使用的 TensorFlow 版本和您要執行的動作來尋找詳細資訊。

## TensorFlow 1.11 版和更新版本
<a name="tf-script-mode"></a>

對於 TensorFlow 版本 1.11 和更新版本，[Amazon SageMaker Python SDK ](https://sagemaker.readthedocs.io/en/stable)支援指令碼模式訓練指令碼。

### 您想要做什麼？
<a name="tf-intent"></a>

我想要在 SageMaker AI 中訓練自訂 TensorFlow 模型。  
對於範例 Jupyter 筆記本，請參閱 [TensorFlow script 模式訓練及服務](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-python-sdk/tensorflow_script_mode_training_and_serving/tensorflow_script_mode_training_and_serving.html)。  
如需文件，請參閱 [使用 TensorFlow 訓練模型](https://sagemaker.readthedocs.io/en/stable/using_tf.html#train-a-model-with-tensorflow)。

我有已在 SageMaker AI 中訓練的 TensorFlow 模型，而且想要將其部署到託管端點。  
如需詳細資訊，請參閱[部屬 TensorFlow Serving 模型](https://sagemaker.readthedocs.io/en/stable/using_tf.html#deploy-tensorflow-serving-models)。

我有已在 SageMaker AI 外訓練的 TensorFlow 模型，而且想要將其部署到 SageMaker AI 端點  
若需詳細資訊，請參閱[直接從模型成品部署](https://sagemaker.readthedocs.io/en/stable/using_tf.html#deploying-directly-from-model-artifacts)。

我想要參閱[ Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) TensorFlow 類別的 API 文件。  
如需詳細資訊，請參閱 [TensorFlow 預估器](https://sagemaker.readthedocs.io/en/stable/sagemaker.tensorflow.html)。

我想要尋找 SageMaker AI TensorFlow 容器儲存庫。  
如需詳細資訊，請參閱[SageMaker TensorFlow 容器 GitHub 儲存庫](https://github.com/aws/sagemaker-tensorflow-container)。

我想要尋找 AWS Deep Learning Containers 支援之 TensorFlow 版本的相關資訊。  
有關詳細資訊，請參閱[可用的深度學習容器映像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。

 如需撰寫 TensorFlow 指令碼模式訓練指令碼，以及使用 TensorFlow 指令碼模式估算器和模型搭配 SageMaker AI 的一般相關資訊，請參閱[使用 TensorFlow 搭配 SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/using_tf.html)。

## 適用於 1.11 版和更舊版本的 TensorFlow 傳統模式
<a name="tf-legacy-mode"></a>

[Amazon SageMaker Python SDK ](https://sagemaker.readthedocs.io/en/stable)提供一種支援 TensorFlow 1.11 版和更舊版本的傳統模式。如果符合下列條件，請使用傳統模式 TensorFlow 訓練指令碼，在 SageMaker AI 中執行 TensorFlow 任務：
+ 您有現有的傳統模式指令碼，且您不想轉換為指令碼模式。
+ 您想要使用早於 1.11 的 TensorFlow 版本。

如需撰寫舊版模式 TensorFlow 指令碼以搭配 SageMaker AI Python SDK 使用的相關資訊，請參閱 [TensorFlow SageMaker 估算器和模型](https://github.com/aws/sagemaker-python-sdk/tree/v1.12.0/src/sagemaker/tensorflow#tensorflow-sagemaker-estimators-and-models)。

# 使用 Triton 推論伺服器搭配 Amazon SageMaker AI 的資源
<a name="triton"></a>

SageMaker AI 可讓客戶使用自訂程式碼搭配 NVIDIA Triton 推論伺服器部署模型。使用下列資源來了解如何使用 Triton 推論伺服器搭配 SageMaker AI。

 此功能可透過 [Triton 推論伺服器容器](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html)的開發使用。這些容器包括 NVIDIA Triton 推論伺服器、常用 ML 架構的支援，以及可讓您在 SageMaker AI 上最佳化效能的實用環境變數。有關所有可用深度學習容器圖像的清單，請參閱[可用的深度學習容器映像檔](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。深度學習容器映像檔會獲得維護並定期更新安全性修補程式。

您可以使用 Triton 推論伺服器容器搭配 SageMaker Python SDK，如同您在 SageMaker AI 模型中使用任何其他容器一樣。不過，使用 SageMaker Python SDK 是選擇性的。您可以搭配 AWS CLI 和 使用 Triton 推論伺服器容器 適用於 Python (Boto3) 的 AWS SDK。

如需 NVIDIA Triton 推論伺服器的詳細資訊，請參閱[ Triton 文件](https://docs.nvidia.com/deeplearning/triton-inference-server/#)。

## Inference
<a name="triton-inference"></a>

**注意**  
Triton Python 後端使用共享內存 (SHMEM) 將您的代碼連接到 Triton。SageMaker AI 推論最多可提供一半的執行個體記憶體做為 SHMEM，因此您可以使用具有更多記憶體的執行個體來處理較大的 SHMEM 大小。

如需推論，您可以使用已訓練的 ML 模型搭配 Triton 推論伺服器，透過 SageMaker AI 部署推論任務。

Triton 推論伺服器容器的一些主要功能包括：
+ **支援多種架構**：Triton 可用來部署來自所有主要機器學習 (ML) 架構的模型。Triton 支援 TensorFlow 圖形定義和 SavedMode、ONNX、PyTorch TorchScript、TensorRT 和自訂 Python/C\$1\$1 模型格式。
+ **模型管道**：Triton 模型整體表示具有前/後處理邏輯的一個模型的管道，以及它們之間的輸入和輸出張量的連接。對整體的單一推論要求會觸發整個管道的執行。
+ **並行模型執行**：同一模型的多個執行個體可以在同一 GPU 或多個 GPU 上同時執行。
+ **動態批次處理**：針對支援批次處理的模型，Triton 具有多種內建的排程和批次處理演算法，可將個別推論請求結合在一起，以提高推論輸送量。這些排程和批次處理決策對於用戶端要求的推論來說是透明的。
+ **多樣化的 CPU 和 GPU 支援**：這些模型可以在 CPU 或 GPU 上執行，以獲得最大的靈活性並支援異質運算需求。

## 您想要做什麼？
<a name="triton-do"></a>

我想要在 SageMaker AI 中部署已訓練的 PyTorch 模型。  
如需 Jupyter 筆記本範例，請參閱[使用 Triton 推論伺服器部署您的 PyTorch Resnet50 模型範例](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-triton/resnet50/triton_resnet50.ipynb)。

我想要在 SageMaker AI 中部署已訓練的 Hugging Face 模型。  
如需 Jupyter 筆記本範例，請參閱[使用 Triton 推論伺服器部署您的 PyTorch BERT 模型範例](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-triton/nlp_bert/triton_nlp_bert.ipynb)。