Amazon SageMaker PlatoBlockchain Data Intelligence ile AWS Graviton tabanlı bulut sunucularında makine öğrenimi çıkarımı iş yüklerini çalıştırın. Dikey Arama. Ai.

Amazon SageMaker ile AWS Graviton tabanlı bulut sunucularında makine öğrenimi çıkarım iş yüklerini çalıştırın

Bugün lansman yapıyoruz Amazon Adaçayı Yapıcı üzerine çıkarım AWS Graviton Graviton çiplerinden gelen fiyat, performans ve verimlilik avantajlarından yararlanmanızı sağlamak için.

Graviton tabanlı örnekler, SageMaker'da model çıkarımı için kullanılabilir. Bu gönderi, bir makine öğrenimi (ML) çıkarım iş yükünü x86'dan SageMaker'daki Graviton tabanlı örneklere taşımanıza ve dağıtmanıza yardımcı olur. SageMaker tarafından eğitilmiş modelinizi Graviton tabanlı örneklere dağıtmak için adım adım bir kılavuz sunuyoruz, Graviton ile çalışırken en iyi uygulamaları ele alıyoruz, fiyat-performans avantajlarını tartışıyoruz ve bir SageMaker Graviton örneğinde bir TensorFlow modelinin nasıl dağıtılacağını gösteriyoruz.

Graviton'a kısa bir genel bakış

AWS Graviton, AWS tarafından tasarlanmış, en iyi fiyat-performansı sağlayan ve x86 muadillerine göre enerji açısından daha verimli olan bir işlemci ailesidir. AWS Graviton 3 işlemciler, Graviton işlemci ailesindeki en yeni işlemcilerdir ve bfloat16 desteği ve iki kat Tek Komutlu Çoklu Veri (SIMD) bant genişliği dahil olmak üzere makine öğrenimi iş yükleri için optimize edilmiştir. Bu iki özellik birleştirildiğinde, Graviton 3, Graviton 2 bulut sunucularına kıyasla üç kata kadar daha iyi performans sağlayabilir. Graviton 3 ayrıca benzer performansla aynı performans için %60'a kadar daha az enerji kullanır. Amazon Elastik Bilgi İşlem Bulutu (Amazon EC2) bulut sunucuları. Karbon ayak izinizi azaltmak ve sürdürülebilirlik hedeflerinize ulaşmak istiyorsanız bu harika bir özelliktir.

Çözüme genel bakış

Modellerinizi Graviton örneklerine dağıtmak için AWS Derin Öğrenme Kapları or kendi kaplarını getir Arm v8.2 mimarisi ile uyumludur.

AWS, PyTorch, TensorFlow, Scikit-learn ve XGBoost ile modelleri barındırmak için konteynerler sağladığından ve modeller mimariden bağımsız olduğundan, modellerinizin x86 destekli bulut sunucularından Graviton bulut sunucularına geçişi (veya yeni dağıtımı) kolaydır. Yine de, kendi kitaplıklarınızı getirmek istiyorsanız, bunu da yapabilirsiniz, kapsayıcınızın Arm64 mimarisini destekleyen bir ortamla yapıldığından emin olun. Daha fazla bilgi için, bkz Kendi algoritma kapsayıcınızı oluşturma.

Modelinizi dağıtmak için üç adımı tamamlamanız gerekir:

  1. Bir SageMaker modeli oluşturun: Bu, diğer parametrelerin yanı sıra model dosyası konumu, dağıtım için kullanılacak kapsayıcı ve çıkarım betiğinin konumu hakkında bilgileri içerecektir. (X86 tabanlı bir çıkarım örneğinde önceden konuşlandırılmış mevcut bir modeliniz varsa bu adımı atlayabilirsiniz.)
  2. Bir uç nokta yapılandırması oluşturun: Bu, uç nokta için istediğiniz örnek türü (örneğin, Graviton7 için ml.c3g.xlarge), 1. adımda oluşturduğunuz modelin adı ve başına örnek sayısı hakkında bilgiler içerecektir. uç nokta.
  3. 2. adımda oluşturulan uç nokta yapılandırmasıyla uç noktayı başlatın.

Önkoşullar

Başlamadan önce aşağıdaki ön koşulları göz önünde bulundurun:

  1. Listelenen ön koşulları tamamlayın Önkoşullar.
  2. Modeliniz PyTorch, TensorFlow, XGBoost veya Scikit-learn tabanlı bir model olmalıdır. Aşağıdaki tablo, bu yazı yazıldığı sırada şu anda desteklenen sürümleri özetlemektedir. En son güncellemeler için bkz. SageMaker Çerçeve Konteynerleri (yalnızca SM desteği).
    . Python TensorFlow PyTorch Scikit-öğrenme XGBoost
    Desteklenen sürümler 3.8 2.9.1 1.12.1 1.0-1 1.3-1 - 1.5-1 arasında
  3. Çıkarım betiği şurada saklanır: Amazon Basit Depolama Hizmeti (Amazon S3).

Aşağıdaki bölümlerde, dağıtım adımlarında size yol göstereceğiz.

SageMaker modeli oluşturun

Halihazırda x86 tabanlı bir çıkarım örneğinde konuşlandırılmış mevcut bir modeliniz varsa bu adımı atlayabilirsiniz. Aksi takdirde, bir SageMaker modeli oluşturmak için aşağıdaki adımları tamamlayın:

  1. Bir S3 klasöründe sakladığınız modeli bulun. URI'yi kopyalayın.
    Model URI'sini daha sonra kullanırsınız. MODEL_S3_LOCATION.
  2. Model eğitimi sırasında kullanılan çerçeve sürümünü ve Python sürümünü belirleyin.
    Çerçevenize ve Python sürümünüze göre mevcut AWS Derin Öğrenme Kapsayıcıları listesinden bir kapsayıcı seçmeniz gerekir. Daha fazla bilgi için bkz. Amazon ECR için çoklu mimari kapsayıcı görüntüleri ile tanışın.
  3. Çıkarım Python komut dosyası URI'sini S3 kovasında bulun (ortak dosya adı: inference.py).
    Çıkarım betiği URI'si INFERENCE_SCRIPT_S3_LOCATION.
  4. Bu değişkenlerle, SageMaker API'sini aşağıdaki komutla çağırabilirsiniz:
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

Ayrıca çoklu mimari görüntüler oluşturabilir ve aynı görüntüyü farklı etiketlerle kullanabilirsiniz. Örneğinizin hangi mimaride konuşlandırılacağını belirtebilirsiniz. Daha fazla bilgi için bkz. Amazon ECR için çoklu mimari kapsayıcı görüntüleri ile tanışın.

Bir uç nokta yapılandırması oluşturun

Modeli oluşturduktan sonra, aşağıdaki komutu çalıştırarak bir uç nokta yapılandırması oluşturmanız gerekir (kullandığımız örnek türüne dikkat edin):

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

Aşağıdaki ekran görüntüsü, SageMaker konsolundaki uç nokta yapılandırma ayrıntılarını gösterir.

Uç noktayı başlat

Önceki adımda oluşturulan uç nokta yapılandırmasıyla uç noktayı dağıtabilirsiniz:

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

Model uç noktanız dağıtılana kadar bekleyin. Tahminler, x86 tabanlı bulut sunucularında dağıtılan uç noktalarınız için tahmin talep ettiğiniz şekilde talep edilebilir.

Aşağıdaki ekran görüntüsü, SageMaker konsolundaki bitiş noktanızı gösterir.

Yapılandırmadan SageMaker Uç Noktası

Neler desteklenir?

SageMaker, TensorFlow ve PyTorch çerçeveleri için performansı optimize edilmiş Graviton derin konteynerler sağlar. Bu kapsayıcılar, bilgisayar görüşünü, doğal dil işlemeyi, önerileri ve genel, derin ve geniş model tabanlı çıkarım kullanım durumlarını destekler. Derin öğrenme kapsayıcılarına ek olarak SageMaker, XGBoost ve Scikit-learn gibi klasik makine öğrenimi çerçeveleri için kaplar da sağlar. Konteynerler, c6g/m6g ve c7g bulut sunucularında ikili uyumludur, bu nedenle çıkarım uygulamasını bir nesilden diğerine geçirmek sorunsuzdur.

C6g/m6g, fp16'yı (yarı kesinlikli kayan nokta) destekler ve uyumlu modeller için c5 bulut sunucularına kıyasla eşdeğer veya daha iyi performans sağlar. C7g, SIMD genişliğini iki katına çıkararak ve modellerinizi çalıştırmak için en uygun maliyetli platform olan bfloat-16'yı (bf16) destekleyerek makine öğrenimi performansını önemli ölçüde artırır.

Hem c6g/m6g hem de c7g, SageMaker'daki diğer CPU bulut sunucularına kıyasla klasik makine öğrenimi (örneğin, XGBoost) için iyi performans sağlar. c16g'deki Bfloat-7 desteği, bf16 ile eğitilmiş veya AMP (Otomatik Karma Hassasiyet) ile eğitilmiş modellerin verimli bir şekilde konuşlandırılmasını sağlar. Graviton'daki Arm Compute Library (ACL) arka ucu, model niceleme olmadan hızlı matematik modu aracılığıyla fp16 operatörlerini bile hızlandırabilen bfloat-32 çekirdekleri sağlar.

Önerilen en iyi uygulamalar

Graviton bulut sunucularında her vCPU fiziksel bir çekirdektir. Ortak CPU kaynakları (SMT'den farklı olarak) için herhangi bir çekişme yoktur ve iş yükü performansı ölçeklendirmesi, her vCPU ilavesiyle doğrusaldır. Bu nedenle, kullanım durumunun izin verdiği her durumda toplu çıkarımın kullanılması önerilir. Bu, toplu işi her bir fiziksel çekirdekte paralel işleyerek vCPU'ların verimli bir şekilde kullanılmasını sağlayacaktır. Toplu çıkarım mümkün değilse, işletim sistemi iş parçacığı planlama ek yükünün ek vCPU'larla birlikte gelen bilgi işlem gücünden daha ağır basmaması için belirli bir yük için en uygun bulut sunucusu boyutu gerekir.

TensorFlow, varsayılan olarak Eigen çekirdekleriyle birlikte gelir ve en iyileştirilmiş çıkarım arka ucunu elde etmek için ACL'li OneDNN'ye geçmeniz önerilir. OneDNN arka ucu ve bfloat-16 hızlı matematik modu, konteyner hizmeti başlatılırken etkinleştirilebilir:

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

Önceki sunum komutu, iki önemli yapılandırmaya sahip standart bir resnet50 modelini barındırır:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Bunlar, çıkarım kabına şu şekilde iletilebilir:

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

Dağıtım örneği

Bu gönderide, SageMaker'da eğitilmiş bir TensorFlow modelini Graviton destekli bir SageMaker çıkarım örneğinde nasıl konuşlandıracağınızı gösteriyoruz.

Kod örneğini bir SageMaker not defteri örneğinde, Amazon SageMaker Stüdyosu not defteri veya yerel modda bir Jupyter not defteri. Yerel modda bir Jupyter not defteri kullanıyorsanız, SageMaker yürütme rolünü almanız gerekir.

Aşağıdaki örnek, CIFAR-10 veri setini ele almaktadır. Defter örneğini SageMaker örneklerinden takip edebilirsiniz. GitHub repo bu gönderide kullanılan modeli yeniden oluşturmak için. Eğitilmiş modeli kullanıyoruz ve cifar10_keras_main.py Çıkarım için Python betiği.

Model bir S3 kovasında saklanır: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

The cifar10_keras_main.py çıkarım için kullanılabilecek komut dosyası şu adreste depolanır:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Biz kullanın us-east-1 Modeli ml.c7g.xlarge Graviton tabanlı bir örneğe bölgelendirin ve dağıtın. Buna dayanarak, AWS Derin Öğrenme Kapsayıcımızın URI'si şu şekildedir: 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Aşağıdaki kod ile kurun:
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. Uç nokta testi için veri kümesini indirin:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Model ve uç nokta yapılandırmasını oluşturun ve uç noktayı devreye alın:
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. İsteğe bağlı olarak, çıkarım betiğinizi şuraya ekleyebilirsiniz: Environment in create_model eğitim sırasında SageMaker modelinize bir yapı olarak eklemediyseniz:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    Dağıtımın gerçekleşmesi için birkaç dakika beklemeniz gerekir.

  5. Uç nokta durumunu aşağıdaki kodla doğrulayın:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Ayrıca kontrol edebilirsiniz AWS Yönetim Konsolu modelinizin ne zaman konuşlandırıldığını görmek için.

  6. Uç noktaları çağırmak için çalışma zamanı ortamını kurun:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Şimdi yükü uç noktayı çağırmak için hazırlıyoruz. Modelin eğitimi için kullanılan aynı tür görüntüleri kullanıyoruz. Bunlar önceki adımlarda indirildi.

  7. Yükü tensörlere aktarın ve modelin beklediği doğru formatı ayarlayın. Bu örnek için yalnızca bir tahmin istiyoruz.
    input_image = x_test[0].reshape(1,32,32,3)

    Model çıktısını bir dizi olarak alıyoruz.

  8. Bir softmax uygularsak, bu çıktıyı olasılıklara dönüştürebiliriz:
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

Kaynakları temizleme

Bu çözümde yer alan hizmetler maliyetlidir. Bu çözümü kullanmayı bitirdiğinizde aşağıdaki kaynakları temizleyin:

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

Fiyat-performans karşılaştırması

Graviton tabanlı bulut sunucuları, x86 tabanlı bulut sunucuları ile karşılaştırıldığında en düşük fiyatı ve en iyi fiyat-performansı sunar. EC2 bulut sunucularına benzer şekilde, ml.c6g bulut sunucularına (Graviton 2) sahip SageMaker çıkarım uç noktaları, ml.c20'e kıyasla %5 daha düşük fiyat sunar ve Graviton 3 ml.c7g bulut sunucuları, ml.c15 bulut sunucularından %6 daha ucuzdur. Daha fazla bilgi için bkz. Amazon SageMaker Fiyatlandırması.

Sonuç

Bu gönderide, modelleri Graviton destekli çıkarım örneklerine dağıtmak için yeni başlatılan SageMaker yeteneğini sergiledik. Size en iyi uygulamalar konusunda rehberlik ettik ve yeni tür çıkarım örneklerinin fiyat-performans faydalarını kısaca tartıştık.

Graviton hakkında daha fazla bilgi edinmek için bkz. AWS Yerçekimi İşlemcisi. AWS Graviton tabanlı EC2 bulut sunucularını Amazon EC2 konsolunda ve şu adrese başvurarak kullanmaya başlayabilirsiniz: AWS Graviton Teknik Kılavuzu. Bu blog gönderisindeki örnek kodla Graviton'da çıkarım yapmak için bir Sagemaker modeli uç noktası dağıtabilirsiniz.


yazarlar hakkında

Victor JaramilloVictor Jaramillo, Doktora, AWS Profesyonel Hizmetlerinde Kıdemli Makine Öğrenimi Mühendisidir. AWS'den önce, bir üniversite profesörü ve tahmine dayalı bakım alanında araştırma bilimcisiydi. Boş zamanlarında motosikletini sürmekten ve kendin yap motosiklet mekaniklerinden hoşlanıyor.

Zmnako AvrahmanZmnako Awrahman, PhD, Amazon Web Services'ta Uygulama Yöneticisi, Makine Öğrenimi KOBİ'si ve Makine Öğrenimi Teknik Alan Topluluğu (TFC) üyesidir. Veri analitiği ve makine öğrenimi ile müşterilerin verilerinden değer elde etmek için bulutun gücünden yararlanmalarına yardımcı oluyor.

Sunita NadamalliSunita Nadamalli AWS'de Yazılım Geliştirme Yöneticisidir. Makine öğrenimi, HPC ve multimedya iş yükleri için Graviton yazılım performans optimizasyonlarına liderlik ediyor. Açık kaynak geliştirme ve Arm SoC'lerle uygun maliyetli yazılım çözümleri sunma konusunda tutkulu.

John LiuJohn Liu Amazon SageMaker ekibinde bir Yazılım Geliştirme Mühendisidir. Mevcut çalışması, geliştiricilerin makine öğrenimi modellerini verimli bir şekilde barındırmasına ve çıkarım performansını iyileştirmesine yardımcı olmaya odaklanmaktadır. Mekânsal veri analizi ve toplumsal sorunları çözmek için yapay zekayı kullanma konusunda tutkulu.

Alan TanAlan Tan SageMaker'da Kıdemli Ürün Müdürüdür ve büyük model çıkarımına yönelik çabalara öncülük etmektedir. Analitik alanına makine öğrenimi uygulama konusunda tutkulu. İş dışında, açık havayı sever.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi