

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

# Gunakan Kode Pemrosesan Anda Sendiri
<a name="use-your-own-processing-code"></a>

Anda dapat menginstal pustaka untuk menjalankan skrip Anda di wadah pemrosesan Anda sendiri atau, dalam skenario yang lebih maju, Anda dapat membangun wadah pemrosesan Anda sendiri yang memenuhi kontrak untuk dijalankan di Amazon AI. SageMaker Untuk informasi lebih lanjut tentang kontainer di SageMaker AI, lihat[Kontainer Docker untuk melatih dan menerapkan model](docker-containers.md). Untuk spesifikasi formal yang mendefinisikan kontrak untuk wadah Amazon SageMaker Processing, lihat[Cara Membangun Wadah Pemrosesan Anda Sendiri (Skenario Lanjutan)](build-your-own-processing-container.md). 

**Topics**
+ [Jalankan Skrip dengan Container Pemrosesan Anda Sendiri](processing-container-run-scripts.md)
+ [Cara Membangun Wadah Pemrosesan Anda Sendiri (Skenario Lanjutan)](build-your-own-processing-container.md)

# Jalankan Skrip dengan Container Pemrosesan Anda Sendiri
<a name="processing-container-run-scripts"></a>

Anda dapat menggunakan skrip scikit-learn untuk memproses data sebelumnya dan mengevaluasi model Anda. Untuk melihat cara menjalankan skrip scikit-learn untuk menjalankan tugas ini, lihat contoh buku catatan Pemrosesan [scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation). Notebook ini menggunakan `ScriptProcessor` kelas dari Amazon SageMaker Python SDK for Processing.

Contoh berikut menunjukkan alur kerja umum untuk menggunakan `ScriptProcessor` kelas dengan wadah pemrosesan Anda sendiri. Alur kerja menunjukkan cara membuat gambar Anda sendiri, membangun wadah Anda, dan menggunakan `ScriptProcessor` kelas untuk menjalankan skrip preprocessing Python dengan container. Pekerjaan pemrosesan memproses data input Anda dan menyimpan data yang diproses di Amazon Simple Storage Service (Amazon S3).

Sebelum menggunakan contoh berikut, Anda harus memiliki data input Anda sendiri dan skrip Python yang disiapkan untuk memproses data Anda. Untuk contoh yang end-to-end dipandu dari proses ini, lihat kembali ke buku catatan sampel [Pemrosesan scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_processing/scikit_learn_data_processing_and_model_evaluation).

1. Buat direktori Docker dan tambahkan Dockerfile yang digunakan untuk membuat wadah pemrosesan. Instal panda dan scikit-pelajari ke dalamnya. (Anda juga dapat menginstal dependensi Anda sendiri dengan `RUN` perintah serupa.)

   ```
   mkdir docker
   
   %%writefile docker/Dockerfile
   
   FROM python:3.7-slim-buster
   
   RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3
   ENV PYTHONUNBUFFERED=TRUE
   
   ENTRYPOINT ["python3"]
   ```

1. Buat wadah menggunakan perintah docker, buat repositori Amazon Elastic Container Registry (Amazon ECR), dan dorong gambar ke Amazon ECR.

   ```
   import boto3
   
   account_id = boto3.client('sts').get_caller_identity().get('Account')
   region = boto3.Session().region_name
   ecr_repository = 'sagemaker-processing-container'
   tag = ':latest'
   processing_repository_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)
   
   # Create ECR repository and push docker image
   !docker build -t $ecr_repository docker
   !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com
   !aws ecr create-repository --repository-name $ecr_repository
   !docker tag {ecr_repository + tag} $processing_repository_uri
   !docker push $processing_repository_uri
   ```

1. Siapkan `ScriptProcessor` dari SDK SageMaker Python untuk menjalankan skrip. Ganti *image\$1uri* dengan URI untuk gambar yang Anda buat, dan ganti *role\$1arn* dengan ARN untuk AWS Identity and Access Management peran yang memiliki akses ke bucket Amazon S3 target Anda.

   ```
   from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput
   
   script_processor = ScriptProcessor(command=['python3'],
                   image_uri='image_uri',
                   role='role_arn',
                   instance_count=1,
                   instance_type='ml.m5.xlarge')
   ```

1. Jalankan penulisan. Ganti *preprocessing.py* dengan nama skrip pemrosesan Python Anda sendiri, dan ganti *s3://path/to/my/input-data.csv* dengan jalur Amazon S3 ke data input Anda.

   ```
   script_processor.run(code='preprocessing.py',
                        inputs=[ProcessingInput(
                           source='s3://path/to/my/input-data.csv',
                           destination='/opt/ml/processing/input')],
                        outputs=[ProcessingOutput(source='/opt/ml/processing/output/train'),
                                  ProcessingOutput(source='/opt/ml/processing/output/validation'),
                                  ProcessingOutput(source='/opt/ml/processing/output/test')])
   ```

Anda dapat menggunakan prosedur yang sama dengan pustaka atau dependensi sistem lainnya. Anda juga dapat menggunakan gambar Docker yang ada. Ini termasuk gambar yang Anda jalankan di platform lain seperti [Kubernetes](https://kubernetes.io/).

# 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). 