

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Cara Membangun Wadah Pemrosesan Anda Sendiri (Skenario Lanjutan)
<a name="build-your-own-processing-container"></a>

Anda dapat memberikan Amazon SageMaker Processing dengan image Docker yang memiliki kode dan dependensi Anda sendiri untuk menjalankan pemrosesan data, rekayasa fitur, dan beban kerja evaluasi model. Berikut ini memberikan informasi tentang cara membangun wadah pemrosesan Anda sendiri.

Contoh berikut dari Dockerfile membangun wadah dengan pustaka Python scikit-learn dan panda, yang dapat Anda jalankan sebagai pekerjaan pemrosesan. 

```
FROM python:3.7-slim-buster

# Install scikit-learn and pandas
RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3

# Add a Python script and configure Docker to run it
ADD processing_script.py /
ENTRYPOINT ["python3", "/processing_script.py"]
```

Untuk contoh skrip pemrosesan, lihat [Memulai dengan SageMaker Memproses](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker_processing/basic_sagemaker_data_processing/basic_sagemaker_processing.ipynb).

Buat dan dorong image Docker ini ke repositori Amazon Elastic Container Registry (Amazon ECR) dan pastikan peran SageMaker AI IAM Anda dapat menarik gambar dari Amazon ECR. Kemudian Anda dapat menjalankan gambar ini di Amazon SageMaker Processing.

# Bagaimana Amazon SageMaker Processing Menjalankan Gambar Kontainer Pemrosesan Anda
<a name="byoc-run-image"></a>

Amazon SageMaker Processing menjalankan image container pemrosesan Anda dengan cara yang sama seperti perintah berikut, di mana `AppSpecification.ImageUri` URI image Amazon ECR yang Anda tentukan dalam suatu `CreateProcessingJob` operasi. 

```
docker run [AppSpecification.ImageUri]
```

Perintah ini menjalankan `ENTRYPOINT` perintah yang dikonfigurasi dalam image Docker Anda. 

Anda juga dapat mengganti perintah entrypoint dalam gambar atau memberikan argumen baris perintah ke perintah entrypoint Anda menggunakan parameter and dalam permintaan Anda. `AppSpecification.ContainerEntrypoint` `AppSpecification.ContainerArgument` `CreateProcessingJob` Menentukan parameter ini akan mengonfigurasi Amazon SageMaker Processing untuk menjalankan container yang mirip dengan cara perintah berikut. 

```
 docker run --entry-point [AppSpecification.ContainerEntrypoint] [AppSpecification.ImageUri] [AppSpecification.ContainerArguments]
```

Misalnya, jika Anda menentukan `ContainerEntrypoint` untuk berada `[python3, -v, /processing_script.py]` dalam `CreateProcessingJob ` permintaan Anda, dan `ContainerArguments` menjadi`[data-format, csv]`, Amazon SageMaker Processing menjalankan container Anda dengan perintah berikut. 

```
 python3 -v /processing_script.py data-format csv 
```

 Saat membangun wadah pemrosesan Anda, pertimbangkan detail berikut: 
+ Amazon SageMaker Processing memutuskan apakah pekerjaan selesai atau gagal tergantung pada kode keluar dari perintah yang dijalankan. Pekerjaan pemrosesan selesai jika semua kontainer pemrosesan berhasil keluar dengan kode keluar 0, dan gagal jika salah satu kontainer keluar dengan kode keluar bukan nol.
+  Amazon SageMaker Processing memungkinkan Anda mengganti titik masuk container pemrosesan dan menyetel argumen baris perintah seperti yang Anda bisa dengan Docker API. Gambar Docker juga dapat mengonfigurasi titik masuk dan argumen baris perintah menggunakan instruksi dan CMD. `ENTRYPOINT` Cara `CreateProcessingJob` `ContainerEntrypoint` dan `ContainerArgument` parameter mengonfigurasi titik masuk gambar Docker dan argumen mencerminkan bagaimana Docker mengganti titik masuk dan argumen melalui Docker API:
  + Jika tidak ada `ContainerEntrypoint` atau `ContainerArguments` disediakan, Processing menggunakan default `ENTRYPOINT` atau CMD dalam gambar.
  + Jika `ContainerEntrypoint` disediakan, tetapi tidak`ContainerArguments`, Processing menjalankan gambar dengan entrypoint yang diberikan, dan mengabaikan `ENTRYPOINT` dan CMD dalam gambar.
  + Jika `ContainerArguments` disediakan, tetapi tidak`ContainerEntrypoint`, Processing menjalankan gambar dengan default `ENTRYPOINT` pada gambar dan dengan argumen yang disediakan.
  + Jika keduanya `ContainerEntrypoint` dan `ContainerArguments` disediakan, Processing menjalankan gambar dengan entrypoint dan argumen yang diberikan, dan mengabaikan `ENTRYPOINT` dan CMD dalam gambar.
+ Anda harus menggunakan formulir exec dari `ENTRYPOINT` instruksi di Dockerfile Anda (`ENTRYPOINT``["executable", "param1", "param2"])`bukan formulir shell (). `ENTRYPOINT` ` command param1 param2` Ini memungkinkan container pemrosesan Anda menerima `SIGINT` dan `SIGKILL` memberi sinyal, yang digunakan Processing untuk menghentikan pemrosesan pekerjaan dengan `StopProcessingJob` API.
+ `/opt/ml`dan semua subdirektorinya dicadangkan oleh SageMaker AI. Saat membuat image Processing Docker Anda, jangan letakkan data apa pun yang diperlukan oleh container pemrosesan Anda di direktori ini.
+ Jika Anda berencana untuk menggunakan perangkat GPU, pastikan container Anda kompatibel dengan nvidia-docker. Sertakan hanya toolkit CUDA dalam wadah. Jangan bundel driver NVIDIA dengan gambar. [Untuk informasi selengkapnya tentang nvidia-docker, lihat nvidia/nvidia-docker.](https://github.com/NVIDIA/nvidia-docker)

# Bagaimana Amazon SageMaker Processing Mengkonfigurasi Input dan Output Untuk Container Pemrosesan Anda
<a name="byoc-input-and-output"></a>

Saat Anda membuat pekerjaan pemrosesan menggunakan `CreateProcessingJob` operasi, Anda dapat menentukan beberapa `ProcessingInput` dan`ProcessingOutput`. nilai. 

Anda menggunakan `ProcessingInput` parameter untuk menentukan URI Amazon Simple Storage Service (Amazon S3) untuk mengunduh data, dan jalur dalam wadah pemrosesan untuk mengunduh data. `ProcessingOutput`Parameter mengonfigurasi jalur dalam wadah pemrosesan untuk mengunggah data, dan tempat di Amazon S3 untuk mengunggah data tersebut. Untuk keduanya `ProcessingInput` dan`ProcessingOutput`, jalur dalam wadah pemrosesan harus dimulai dengan`/opt/ml/processing/ `.

Misalnya, Anda dapat membuat pekerjaan pemrosesan dengan satu `ProcessingInput` parameter yang mengunduh data dari `s3://your-data-bucket/path/to/input/csv/data` `/opt/ml/processing/csv` dalam wadah pemrosesan Anda, dan `ProcessingOutput` parameter yang mengunggah data dari `/opt/ml/processing/processed_csv` ke`s3://your-data-bucket/path/to/output/csv/data`. Pekerjaan pemrosesan Anda akan membaca data input, dan menulis data keluaran ke`/opt/ml/processing/processed_csv`. Kemudian mengunggah data yang ditulis ke jalur ini ke lokasi keluaran Amazon S3 yang ditentukan. 

**penting**  
Tautan simbolik (symlink) tidak dapat digunakan untuk mengunggah data keluaran ke Amazon S3. Symlink tidak diikuti saat mengunggah data keluaran. 

# Bagaimana Amazon SageMaker Processing Menyediakan Log dan Metrik untuk Wadah Pemrosesan Anda
<a name="byoc-logs-and-metrics"></a>

Saat wadah pemrosesan Anda menulis ke `stdout` atau`stderr`, Amazon SageMaker Processing menyimpan output dari setiap wadah pemrosesan dan menempatkannya di CloudWatch log Amazon. Untuk informasi tentang pencatatan, lihat[CloudWatch Log untuk Amazon SageMaker AI](logging-cloudwatch.md).

Amazon SageMaker Processing juga menyediakan CloudWatch metrik untuk setiap instance yang menjalankan container pemrosesan Anda. Untuk informasi tentang metrik, lihat[Metrik Amazon SageMaker AI di Amazon CloudWatch](monitoring-cloudwatch.md). 

## Bagaimana Amazon SageMaker Processing Mengkonfigurasi Wadah Pemrosesan Anda
<a name="byoc-config"></a>

Amazon SageMaker Processing menyediakan informasi konfigurasi ke wadah pemrosesan Anda melalui variabel lingkungan dan dua file JSON— `/opt/ml/config/processingjobconfig.json` dan `/opt/ml/config/resourceconfig.json` — di lokasi yang telah ditentukan sebelumnya dalam wadah. 

Saat pekerjaan pemrosesan dimulai, ia menggunakan variabel lingkungan yang Anda tentukan dengan `Environment` peta dalam `CreateProcessingJob` permintaan. `/opt/ml/config/processingjobconfig.json`File berisi informasi tentang nama host wadah pemrosesan Anda, dan juga ditentukan dalam `CreateProcessingJob` permintaan. 

Contoh berikut menunjukkan format `/opt/ml/config/processingjobconfig.json` file.

```
{
    "ProcessingJobArn": "<processing_job_arn>",
    "ProcessingJobName": "<processing_job_name>",
    "AppSpecification": {
        "ImageUri": "<image_uri>",
        "ContainerEntrypoint": null,
        "ContainerArguments": null
    },
    "Environment": {
        "KEY": "VALUE"
    },
    "ProcessingInputs": [
        {
            "InputName": "input-1",
            "S3Input": {
                "LocalPath": "/opt/ml/processing/input/dataset",
                "S3Uri": "<s3_uri>",
                "S3DataDistributionType": "FullyReplicated",
                "S3DataType": "S3Prefix",
                "S3InputMode": "File",
                "S3CompressionType": "None",
                "S3DownloadMode": "StartOfJob"
            }
        }
    ],
    "ProcessingOutputConfig": {
        "Outputs": [
            {
                "OutputName": "output-1",
                "S3Output": {
                    "LocalPath": "/opt/ml/processing/output/dataset",
                    "S3Uri": "<s3_uri>",
                    "S3UploadMode": "EndOfJob"
                }
            }
        ],
        "KmsKeyId": null
    },
    "ProcessingResources": {
        "ClusterConfig": {
            "InstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "VolumeSizeInGB": 30,
            "VolumeKmsKeyId": null
        }
    },
    "RoleArn": "<IAM role>",
    "StoppingCondition": {
        "MaxRuntimeInSeconds": 86400
    }
}
```

`/opt/ml/config/resourceconfig.json`File berisi informasi tentang nama host wadah pemrosesan Anda. Gunakan nama host berikut saat membuat atau menjalankan kode pemrosesan terdistribusi.

```
{
  "current_host": "algo-1",
  "hosts": ["algo-1","algo-2","algo-3"]
}
```

Jangan gunakan informasi tentang nama host yang terkandung di dalam `/etc/hostname` atau `/etc/hosts` karena mungkin tidak akurat.

Informasi nama host mungkin tidak segera tersedia untuk wadah pemrosesan. Sebaiknya tambahkan kebijakan coba lagi pada operasi resolusi nama host saat node tersedia di cluster.

# Simpan dan Akses Informasi Metadata Tentang Pekerjaan Pemrosesan Anda
<a name="byoc-metadata"></a>

Untuk menyimpan metadata dari wadah pemrosesan setelah keluar, kontainer dapat menulis teks yang dikodekan UTF-8 ke file. `/opt/ml/output/message` Setelah pekerjaan pemrosesan memasuki status terminal apa pun (” `Completed` “," `Stopped` “, atau" `Failed` “), bidang`ExitMessage`" "di [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html)berisi 1 KB pertama dari file ini. Akses bagian awal file dengan panggilan ke [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeProcessingJob.html), yang mengembalikannya melalui `ExitMessage` parameter. Untuk pekerjaan pemrosesan yang gagal, Anda dapat menggunakan bidang ini untuk mengkomunikasikan informasi tentang mengapa wadah pemrosesan gagal.

**penting**  
Jangan menulis data sensitif ke `/opt/ml/output/message` file. 

Jika data dalam file ini tidak dikodekan UTF-8, pekerjaan gagal dan mengembalikan file. `ClientError` Jika beberapa kontainer keluar dengan isi `ExitMessage` dari setiap kontainer pemrosesan digabungkan, kemudian dipotong menjadi 1 KB. `ExitMessage,`

# Jalankan Container Pemrosesan Anda Menggunakan SageMaker AI Python SDK
<a name="byoc-run"></a>

Anda dapat menggunakan SageMaker Python SDK untuk menjalankan gambar pemrosesan Anda sendiri dengan menggunakan kelas. `Processor` Contoh berikut menunjukkan cara menjalankan container pemrosesan Anda sendiri dengan satu input dari Amazon Simple Storage Service (Amazon S3) dan satu output ke Amazon S3.

```
from sagemaker.processing import Processor, ProcessingInput, ProcessingOutput

processor = Processor(image_uri='<your_ecr_image_uri>',
                     role=role,
                     instance_count=1,
                     instance_type="ml.m5.xlarge")

processor.run(inputs=[ProcessingInput(
                        source='<s3_uri or local path>',
                        destination='/opt/ml/processing/input_data')],
                    outputs=[ProcessingOutput(
                        source='/opt/ml/processing/processed_data',
                        destination='<s3_uri>')],
                    )
```

Alih-alih membangun kode pemrosesan Anda ke dalam gambar pemrosesan Anda, Anda dapat memberikan gambar dan perintah yang ingin Anda jalankan, bersama dengan kode yang ingin Anda jalankan di dalam wadah itu. `ScriptProcessor` Sebagai contoh, lihat [Jalankan Skrip dengan Container Pemrosesan Anda Sendiri](processing-container-run-scripts.md).

Anda juga dapat menggunakan gambar scikit-learn yang disediakan Amazon SageMaker Processing `SKLearnProcessor` untuk menjalankan skrip scikit-learn. Sebagai contoh, lihat [Jalankan Processing Job dengan scikit-learn](use-scikit-learn-processing-container.md). 