Azure Machine Learning SDK'sı (v1) ile PyTorch modellerini uygun ölçekte eğitme

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Bu makalede Azure Machine Learning kullanarak PyTorch eğitim betiklerinizi kurumsal ölçekte çalıştırmayı öğrenin.

Bu makaledeki örnek betikler, PyTorch'un öğrenme aktarımı öğreticisine göre derin öğrenme sinir ağı (DNN) oluşturmak üzere tavuk ve hindi görüntülerini sınıflandırmak için kullanılır. Öğrenmeyi aktarma, bir sorunun çözülmesinden elde edilen bilgileri farklı ama ilgili bir soruna uygulayan bir tekniktir. Öğrenme aktarımı sıfırdan eğitime kıyasla daha az veri, zaman ve işlem kaynağı gerektirerek eğitim sürecini kısaltır. Öğrenme aktarımı hakkında daha fazla bilgi edinmek için derin öğrenme ve makine öğrenmesi makalesine bakın.

İster sıfırdan derin öğrenme pyTorch modeli eğitin ister mevcut bir modeli buluta taşıyın, Azure Machine Learning'i kullanarak esnek bulut işlem kaynaklarını kullanarak açık kaynak eğitim işlerinin ölçeğini genişletebilirsiniz. Azure Machine Learning ile üretim sınıfı modeller oluşturabilir, dağıtabilir, sürüm oluşturabilir ve izleyebilirsiniz.

Önkoşullar

Bu kodu şu ortamlardan birinde çalıştırın:

Gpu kümesi oluşturmak için bu makaledeki kodu çalıştırabilmeniz için önce çalışma alanınız için kota artışı istemeniz gerekir.

Denemeyi ayarlama

Bu bölüm, gerekli Python paketlerini yükleyerek, çalışma alanını başlatarak, işlem hedefini oluşturarak ve eğitim ortamını tanımlayarak eğitim denemesini ayarlar.

Paketleri içeri aktarma

İlk olarak, gerekli Python kitaplıklarını içeri aktarın.

import os
import shutil

from azureml.core.workspace import Workspace
from azureml.core import Experiment
from azureml.core import Environment

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

Çalışma alanı başlatma

Azure Machine Learning çalışma alanı, hizmetin en üst düzey kaynağıdır. Oluşturduğunuz tüm yapıtlarla çalışmak için merkezi bir yer sağlar. Python SDK'sında, bir workspace nesne oluşturarak çalışma alanı yapıtlarına erişebilirsiniz.

Önkoşullar bölümünde oluşturulan dosyadan config.json bir çalışma alanı nesnesi oluşturun.

ws = Workspace.from_config()

Verileri alma

Veri kümesi, hindiler ve tavuklar için yaklaşık 120 eğitim görüntüsünden ve her sınıf için 100 doğrulama görüntüsünden oluşur. Eğitim betiğimizin pytorch_train.pybir parçası olarak veri kümesini indirip ayıklayacağız. Görüntüler, Açık Görüntüler v5 Veri Kümesinin bir alt kümesidir. Kendi verilerinizle eğitmek üzere JSONL oluşturma hakkında daha fazla adım için bu Jupyter not defterine bakın.

Eğitim betiğini hazırlama

Bu öğreticide , eğitim betiği pytorch_train.pyzaten sağlanmıştır. Uygulamada olduğu gibi herhangi bir özel eğitim betiğini alabilir ve Azure Machine Learning ile çalıştırabilirsiniz.

Eğitim betikleriniz için bir klasör oluşturun.

project_folder = './pytorch-birds'
os.makedirs(project_folder, exist_ok=True)
shutil.copy('pytorch_train.py', project_folder)

İşlem hedefi oluşturma

PyTorch işinizin üzerinde çalışması için bir işlem hedefi oluşturun. Bu örnekte GPU özellikli bir Azure Machine Learning işlem kümesi oluşturun.

Önemli

GPU kümesi oluşturabilmeniz için önce çalışma alanınız için kota artışı istemeniz gerekir.


# Choose a name for your CPU cluster
cluster_name = "gpu-cluster"

# Verify that cluster does not exist already
try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6', 
                                                           max_nodes=4)

    # Create the cluster with the specified name and configuration
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    # Wait for the cluster to complete, show the output log
    compute_target.wait_for_completion(show_output=True, min_node_count=None, timeout_in_minutes=20)

Bunun yerine bir CPU kümesi oluşturmak istiyorsanız, vm_size parametresine STANDARD_D2_V2 gibi farklı bir VM boyutu sağlayın.

İşlem hedefleri hakkında daha fazla bilgi için işlem hedefi nedir makalesine bakın.

Ortamınızı tanımlama

Eğitim betiğinizin bağımlılıklarını kapsülleyen Azure Machine Learning Ortamını tanımlamak için özel bir ortam tanımlayabilir veya Azure Machine Learning tarafından seçilmiş bir ortam kullanabilirsiniz.

Seçilmiş bir ortam kullanma

Azure Machine Learning, kendi ortamınızı tanımlamak istemiyorsanız önceden oluşturulmuş, seçilmiş ortamlar sağlar. PyTorch için pyTorch'un farklı sürümlerine karşılık gelen birkaç CPU ve GPU tarafından seçilmiş ortam vardır.

Seçilmiş bir ortam kullanmak istiyorsanız, bunun yerine aşağıdaki komutu çalıştırabilirsiniz:

curated_env_name = 'AzureML-PyTorch-1.6-GPU'
pytorch_env = Environment.get(workspace=ws, name=curated_env_name)

Seçilen ortama dahil edilen paketleri görmek için diske conda bağımlılıklarını yazabilirsiniz:

pytorch_env.save_to_directory(path=curated_env_name)

Seçilen ortamın eğitim betiğinizin gerektirdiği tüm bağımlılıkları içerdiğinden emin olun. Aksi takdirde, ortamı eksik bağımlılıkları içerecek şekilde değiştirmeniz gerekir. Ortam değiştirilirse, 'AzureML' ön eki seçilmiş ortamlar için ayrıldığından yeni bir ad vermeniz gerekir. Conda bağımlılıkları YAML dosyasını değiştirdiyseniz, dosyadan yeni bir adla yeni bir ortam oluşturabilirsiniz, örneğin:

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

Bunun yerine, seçilen ortam nesnesini doğrudan değiştirdiyseniz, bu ortamı yeni bir adla kopyalayabilirsiniz:

pytorch_env = pytorch_env.clone(new_name='pytorch-1.6-gpu')

Özel ortam oluşturma

Ayrıca, eğitim betiğinizin bağımlılıklarını kapsülleyen kendi Azure Machine Learning ortamınızı da oluşturabilirsiniz.

İlk olarak, conda bağımlılıklarınızı bir YAML dosyasında tanımlayın; bu örnekte dosya olarak adlandırılır conda_dependencies.yml.

channels:
- conda-forge
dependencies:
- python=3.7
- pip=21.3.1
- pip:
  - azureml-defaults
  - torch==1.6.0
  - torchvision==0.7.0
  - future==0.17.1
  - pillow

Bu conda ortamı belirtiminden bir Azure Machine Learning ortamı oluşturun. Ortam, çalışma zamanında bir Docker kapsayıcısına paketlenir.

Varsayılan olarak temel görüntü belirtilmezse, Azure Machine Learning temel görüntü olarak bir CPU görüntüsü azureml.core.environment.DEFAULT_CPU_IMAGE kullanır. Bu örnek bir GPU kümesinde eğitim çalıştırdığından, gerekli GPU sürücülerine ve bağımlılıklarına sahip bir GPU temel görüntüsü belirtmeniz gerekir. Azure Machine Learning, Microsoft Container Registry'de (MCR) yayımlanan ve kullanabileceğiniz bir dizi temel görüntü tutar. Daha fazla bilgi için bkz . AzureML-Containers GitHub deposu.

pytorch_env = Environment.from_conda_specification(name='pytorch-1.6-gpu', file_path='./conda_dependencies.yml')

# Specify a GPU base image
pytorch_env.docker.enabled = True
pytorch_env.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'

Bahşiş

İsteğe bağlı olarak, tüm bağımlılıklarınızı doğrudan özel bir Docker görüntüsünde veya Dockerfile'da yakalayabilir ve ortamınızı bu görüntüden oluşturabilirsiniz. Daha fazla bilgi için bkz . Özel görüntüyle eğitma.

Ortam oluşturma ve kullanma hakkında daha fazla bilgi için bkz . Azure Machine Learning'de yazılım ortamları oluşturma ve kullanma.

Eğitim çalıştırmanızı yapılandırma ve gönderme

ScriptRunConfig Oluşturma

Eğitim betiğiniz, kullanılacak ortamınız ve üzerinde çalıştırılacak işlem hedefi dahil olmak üzere eğitim işinizin yapılandırma ayrıntılarını belirtmek için bir ScriptRunConfig nesnesi oluşturun. Eğitim betiğinizin bağımsız değişkenleri, parametresinde arguments belirtilirse komut satırı aracılığıyla geçirilir. Aşağıdaki kod tek düğümlü bir PyTorch işi yapılandıracaktır.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='pytorch_train.py',
                      arguments=['--num_epochs', 30, '--output_dir', './outputs'],
                      compute_target=compute_target,
                      environment=pytorch_env)

Uyarı

Azure Machine Learning, kaynak dizinin tamamını kopyalayarak eğitim betikleri çalıştırır. Karşıya yüklemek istemediğiniz hassas verileriniz varsa bir .ignore dosyası kullanın veya kaynak dizinine eklemeyin. Bunun yerine, Azure Machine Learning veri kümesini kullanarak verilerinize erişin.

ScriptRunConfig ile işleri yapılandırma hakkında daha fazla bilgi için bkz . Eğitim çalıştırmalarını yapılandırma ve gönderme.

Uyarı

Daha önce PyTorch eğitim işlerinizi yapılandırmak için PyTorch tahmin aracını kullandıysanız Estimators'ın 1.19.0 SDK sürümünden itibaren kullanım dışı bırakıldığını lütfen unutmayın. Azure Machine Learning SDK >= 1.15.0 ile ScriptRunConfig, derin öğrenme çerçeveleri kullananlar da dahil olmak üzere eğitim işlerini yapılandırmanın önerilen yoludur. Sık sorulan geçiş soruları için Estimator to ScriptRunConfig geçiş kılavuzuna bakın.

Çalıştırmanızı gönderme

Run nesnesi, iş çalışırken ve tamamlandıktan sonra çalıştırma geçmişine arabirim sağlar.

run = Experiment(ws, name='Tutorial-pytorch-birds').submit(src)
run.wait_for_completion(show_output=True)

Çalıştırma yürütmesi sırasında ne olur?

Çalıştırma yürütülürken aşağıdaki aşamalardan geçer:

  • Hazırlanıyor: Tanımlanan ortama göre bir docker görüntüsü oluşturulur. Görüntü çalışma alanının kapsayıcı kayıt defterine yüklenir ve sonraki çalıştırmalar için önbelleğe alınır. Günlükler de çalıştırma geçmişine akışla aktarılır ve ilerleme durumunu izlemek için görüntülenebilir. Bunun yerine seçilmiş bir ortam belirtilirse, seçilen ortamı destekleyen önbelleğe alınmış görüntü kullanılır.

  • Ölçeklendirme: Batch AI kümesinin çalıştırmayı yürütmek için şu anda kullanılabilir olandan daha fazla düğüme ihtiyacı varsa küme ölçeği artırmaya çalışır.

  • Çalışıyor: Betik klasöründeki tüm betikler işlem hedefine yüklenir, veri depoları bağlanır veya kopyalanır ve script yürütülür. stdout ve ./logs klasöründen alınan çıkışlar çalıştırma geçmişine akışla aktarılır ve çalıştırmayı izlemek için kullanılabilir.

  • İşlem Sonrası: Çalıştırmanın ./outputs klasörü çalıştırma geçmişine kopyalanır.

Modeli kaydetme veya indirme

Modeli eğitdikten sonra çalışma alanınıza kaydedebilirsiniz. Model kaydı, model yönetimini ve dağıtımını basitleştirmek için modellerinizi çalışma alanınızda depolamanıza ve sürüm oluşturmanıza olanak tanır.

model = run.register_model(model_name='pytorch-birds', model_path='outputs/model.pt')

Bahşiş

Dağıtım nasıl yapılır, modelleri kaydetmeyle ilgili bir bölüm içerir, ancak kayıtlı bir modeliniz olduğundan doğrudan dağıtım için işlem hedefi oluşturmaya atlayabilirsiniz.

Run nesnesini kullanarak modelin yerel bir kopyasını da indirebilirsiniz. Eğitim betiğinde pytorch_train.pyPyTorch kaydetme nesnesi modeli yerel bir klasörde (işlem hedefine yerel) kalıcı hale getirir. Bir kopyasını indirmek için Run nesnesini kullanabilirsiniz.

# Create a model folder in the current directory
os.makedirs('./model', exist_ok=True)

# Download the model from run history
run.download_file(name='outputs/model.pt', output_file_path='./model/model.pt'), 

Dağıtılmış eğitim

Azure Machine Learning, eğitim iş yüklerinizi ölçeklendirebilmeniz için çok düğümlü dağıtılmış PyTorch işlerini de destekler. Dağıtılmış PyTorch işlerini kolayca çalıştırabilirsiniz ve Azure Machine Learning düzenlemeyi sizin için yönetir.

Azure Machine Learning, hem Horovod hem de PyTorch'un yerleşik DistributedDataParallel modülüyle dağıtılmış PyTorch işlerini çalıştırmayı destekler.

Dağıtılmış eğitim hakkında daha fazla bilgi için bkz . Dağıtılmış GPU eğitim kılavuzu.

ONNX'e dışarı aktarma

ONNX Çalışma Zamanı ile çıkarımları iyileştirmek için eğitilen PyTorch modelinizi ONNX biçimine dönüştürün. Çıkarım veya model puanlaması, dağıtılan modelin tahmin için en yaygın olarak üretim verilerinde kullanıldığı aşamadır. Bir örnek için PyTorch'tan ONNX'e modeli dışarı aktarma öğreticisine bakın.

Sonraki adımlar

Bu makalede, Azure Machine Learning'de PyTorch kullanarak derin öğrenme, sinir ağı eğitip kaydettiniz. Modelin nasıl dağıtılacağı hakkında bilgi edinmek için model dağıtım makalemize geçin.