Bantu tingkatkan halaman ini
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ingin berkontribusi pada panduan pengguna ini? Pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan AWSInferentia instance dengan Amazon EKS untuk Machine Learning
Topik ini menjelaskan cara membuat klaster Amazon EKS dengan node yang menjalankan instans Amazon EC2 Inf1
catatan
Perangkat neuron logis IDs harus bersebelahan. Jika Pod meminta beberapa perangkat Neuron dijadwalkan pada tipe inf1.6xlarge
atau inf1.24xlarge
instance (yang memiliki lebih dari satu perangkat Neuron), itu Pod akan gagal untuk memulai jika Kubernetes scheduler memilih perangkat yang tidak bersebelahan. IDs Untuk informasi selengkapnya, lihat Logika perangkat IDs harus bersebelahan
Prasyarat
-
Miliki
eksctl
yang terinstal pada komputer Anda. Jika Anda belum menginstalnya, lihat Instalasidi eksctl
dokumentasi. -
Miliki
kubectl
yang ter-install pada komputer Anda. Untuk informasi selengkapnya, lihat Mengatur kubectl dan eksctl. -
(Opsional) Miliki
python3
yang ter-install pada komputer Anda. Jika Anda belum menginstalnya, lihat unduhan Pythonuntuk petunjuk penginstalan.
Membuat klaster
-
Buat cluster dengan node EC2 instance Inf1 Amazon. Anda dapat mengganti
inf1.2xlarge
dengan jenis instans Inf1apa pun. eksctl
Utilitas mendeteksi bahwa Anda meluncurkan grup node dengan tipeInf1
instans dan akan memulai node Anda menggunakan salah satu Amazon EKS yang dioptimalkan Amazon Linux AMIs yang dipercepat.catatan
Anda tidak dapat menggunakan peran IAM untuk akun layanan dengan TensorFlow Serving.
eksctl create cluster \ --name inferentia \ --region region-code \ --nodegroup-name ng-inf1 \ --node-type inf1.2xlarge \ --nodes 2 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --ssh-public-key your-key \ --with-oidc
catatan
Perhatikan nilai baris output berikut. Ini digunakan dalam langkah selanjutnya (opsional).
[9] adding identity "arn:aws: iam::111122223333:role/eksctl-inferentia-nodegroup-ng-in-NodeInstanceRole-FI7HIYS3BS09" to auth ConfigMap
Saat meluncurkan grup node dengan
Inf1
instance,eksctl
secara otomatis menginstal Neuron AWS Kubernetes plugin perangkat. Plugin ini mengiklankan perangkat Neuron sebagai sumber daya sistem untuk Kubernetes scheduler, yang dapat diminta oleh kontainer. Sebagai tambahan untuk kebijakan IAM simpul Amazon EKS default, Amazon S3 hanya membaca kebijakan akses yang ditambahkan sehingga aplikasi sampel, dibahas dalam langkah berikutnya, dapat memuat model terlatih dari Amazon S3. -
Pastikan bahwa semua Pods sudah dimulai dengan benar.
kubectl get pods -n kube-system
Output yang disingkat:
NAME READY STATUS RESTARTS AGE [...] neuron-device-plugin-daemonset-6djhp 1/1 Running 0 5m neuron-device-plugin-daemonset-hwjsj 1/1 Running 0 5m
(Opsional) Menyebarkan gambar aplikasi TensorFlow Penyajian
Sebuah model terlatih harus dikompilasikan ke target Inferentia sebelum dapat di-deploy pada instans Inferentia. Untuk melanjutkan, Anda memerlukan TensorFlow model yang dioptimalkan Neuron
Manifes penerapan sampel mengelola wadah penyajian inferensi bawaan yang TensorFlow disediakan oleh AWS Deep Learning Containers. Di dalam wadah adalah AWS Neuron Runtime dan aplikasi TensorFlow Serving. Daftar lengkap Deep Learning Containers pra-bangun yang dioptimalkan untuk Neuron dipertahankan GitHub di bawah Gambar yang Tersedia
Jumlah perangkat Neuron yang dialokasikan untuk aplikasi penyajian Anda agar dapat disesuaikan dengan mengubah sumber daya aws.amazon.com/neuron
dalam deployment yaml. Harap dicatat bahwa komunikasi antara TensorFlow Serving dan runtime Neuron terjadi melalui GRPC, yang membutuhkan penerusan IPC_LOCK
kemampuan ke wadah.
-
Tambahkan kebijakan
AmazonS3ReadOnlyAccess
IAM ke peran instance node yang dibuat pada langkah 1 dari Buat cluster. Hal ini diperlukan agar aplikasi sampel dapat memuat model terlatih dari Amazon S3.aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name eksctl-inferentia-nodegroup-ng-in-NodeInstanceRole-FI7HIYS3BS09
-
Buat file bernama
rn50_deployment.yaml
dengan isi berikut ini. Memperbarui kode wilayah dan jalur model agar sesuai dengan pengaturan yang Anda inginkan. Nama model adalah untuk tujuan identifikasi ketika klien membuat permintaan ke TensorFlow server. Contoh ini menggunakan nama model untuk mencocokkan contoh skrip klien ResNet 50 yang akan digunakan pada langkah selanjutnya untuk mengirim permintaan prediksi.aws ecr list-images --repository-name neuron-rtd --registry-id 790709498068 --region us-west-2
kind: Deployment apiVersion: apps/v1 metadata: name: eks-neuron-test labels: app: eks-neuron-test role: master spec: replicas: 2 selector: matchLabels: app: eks-neuron-test role: master template: metadata: labels: app: eks-neuron-test role: master spec: containers: - name: eks-neuron-test image: 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-neuron:1.15.4-neuron-py37-ubuntu18.04 command: - /usr/local/bin/entrypoint.sh args: - --port=8500 - --rest_api_port=9000 - --model_name=resnet50_neuron - --model_base_path=s3://${your-bucket-of-models}/resnet50_neuron/ ports: - containerPort: 8500 - containerPort: 9000 imagePullPolicy: IfNotPresent env: - name: AWS_REGION value: "us-east-1" - name: S3_USE_HTTPS value: "1" - name: S3_VERIFY_SSL value: "0" - name: S3_ENDPOINT value: s3.us-east-1.amazonaws.com - name: AWS_LOG_LEVEL value: "3" resources: limits: cpu: 4 memory: 4Gi aws.amazon.com/neuron: 1 requests: cpu: "1" memory: 1Gi securityContext: capabilities: add: - IPC_LOCK
-
Men-deploy model.
kubectl apply -f rn50_deployment.yaml
-
Membuat file bernama
rn50_service.yaml
dengan konten berikut. Port HTTP dan gRPC dibuka untuk menerima permintaan prediksi.kind: Service apiVersion: v1 metadata: name: eks-neuron-test labels: app: eks-neuron-test spec: type: ClusterIP ports: - name: http-tf-serving port: 8500 targetPort: 8500 - name: grpc-tf-serving port: 9000 targetPort: 9000 selector: app: eks-neuron-test role: master
-
Buat Kubernetes layanan untuk aplikasi Melayani TensorFlow model Anda.
kubectl apply -f rn50_service.yaml
(Opsional) Buat prediksi terhadap layanan TensorFlow Serving Anda
-
Untuk menguji secara lokal, meneruskan port gRPC ke layanan
eks-neuron-test
.kubectl port-forward service/eks-neuron-test 8500:8500 &
-
Membuat skrip Python yang disebut
tensorflow-model-server-infer.py
dengan konten berikut. Skrip ini menjalankan inferensi melalui gRPC, yang merupakan kerangka kerja layanan.import numpy as np import grpc import tensorflow as tf from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.resnet50 import preprocess_input from tensorflow_serving.apis import predict_pb2 from tensorflow_serving.apis import prediction_service_pb2_grpc from tensorflow.keras.applications.resnet50 import decode_predictions if __name__ == '__main__': channel = grpc.insecure_channel('localhost:8500') stub = prediction_service_pb2_grpc.PredictionServiceStub(channel) img_file = tf.keras.utils.get_file( "./kitten_small.jpg", "https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg") img = image.load_img(img_file, target_size=(224, 224)) img_array = preprocess_input(image.img_to_array(img)[None, ...]) request = predict_pb2.PredictRequest() request.model_spec.name = 'resnet50_inf1' request.inputs['input'].CopyFrom( tf.make_tensor_proto(img_array, shape=img_array.shape)) result = stub.Predict(request) prediction = tf.make_ndarray(result.outputs['output']) print(decode_predictions(prediction))
-
Menjalankan penulisan untuk mengirimkan prediksi ke layanan Anda.
python3 tensorflow-model-server-infer.py
Contoh output adalah sebagai berikut.
[[(u'n02123045', u'tabby', 0.68817204), (u'n02127052', u'lynx', 0.12701613), (u'n02123159', u'tiger_cat', 0.08736559), (u'n02124075', u'Egyptian_cat', 0.063844085), (u'n02128757', u'snow_leopard', 0.009240591)]]