Share via


Hızlı Başlangıç: Batch AI ile bir derin öğrenme modeli eğitme

Bu hızlı başlangıçta, Batch AI tarafından yönetilen GPU özellikli bir sanal makine üzerinde örnek bir derin öğrenme modelini eğitme gösterilmektedir. Batch AI, veri bilimcilerinin ve yapay zeka araştırmacılarının Azure sanal makine kümelerindeki yapay zeka ve makine öğrenimi modellerini ölçeğe uygun olarak eğitmesini sağlayan bir yönetilen hizmettir.

Bu örnekte, el yazısı rakamlardan oluşan MNIST veritabanı üzerinde örnek bir TensorFlow sinir ağı eğitmek üzere Batch AI ayarlamak için Azure CLI’yi kullanırsınız. Bu hızlı başlangıcı tamamladıktan sonra, bir yapay zeka veya makine öğrenimi modelini eğitmek için Batch AI kullanmayla ilgili temel kavramları anlayacak ve daha büyük ölçekte farklı modelleri eğitmeyi denemek için hazır olacaksınız.

Azure Cloud Shell’i açma

Azure Cloud Shell, bu makaledeki adımları çalıştırmak için kullanabileceğiniz ücretsiz bir etkileşimli kabuktur. Yaygın kullanılan Azure araçları hesabınızla kullanmanız için Cloud Shell'de önceden yüklenir ve yapılandırılır. Kopyala’ya tıklayarak kodu kopyalamanız, Cloud Shell’e yapıştırmanız ve Enter tuşuna basarak çalıştırmanız yeterlidir. Cloud Shell’i açmanın birkaç yolu vardır:

Kod bloğunun sağ üst köşesindeki Deneyin’i seçin. Bu makaledeki Cloud Shell
Cloud Shell’i tarayıcınızda açın. https://shell.azure.com/bash
Azure portalının sağ üst köşesindeki menüde yer alan Cloud Shell düğmesini seçin. Portalda Cloud Shell

CLI'yi yerel olarak yükleyip kullanmayı seçerseniz bu hızlı başlangıç için Azure CLI 2.0.38 veya sonraki bir sürümünü kullanmanız gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Bu hızlı başlangıçta, komutları Cloud Shell veya yerel bilgisayarınızdaki bir Bash kabuğunda çalıştırdığınız varsayılır. Azure CLI ile Batch AI kümesi oluşturmaya yönelik hızlı başlangıcı zaten tamamladıysanız, kaynak grubu ve Batch AI kümesi oluşturmayı içeren ilk iki adımı atlayın.

Kaynak grubu oluşturma

az group create komutuyla bir kaynak grubu oluşturun. Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.

Aşağıdaki örnek eastus2 konumunda myResourceGroup adlı bir kaynak grubu oluşturur. Doğu ABD 2 konumunu veya Batch AI hizmetinin kullanılabilir olduğu başka bir konumu seçtiğinizden emin olun.

az group create \
    --name myResourceGroup \
    --location eastus2

Batch AI kümesi oluşturma

İlk olarak, bir Batch AI çalışma alanı oluşturmak için az batchai workspace create komutunu kullanın. Batch AI kümeleriniz ve diğer kaynaklarınızı düzenlemek için bir çalışma alanınızın olması gerekir.

az batchai workspace create \
    --workspace myworkspace \
    --resource-group myResourceGroup

Batch AI kümesi oluşturmak için, az batchai cluster create komutunu kullanın. Aşağıdaki örnekte, şu özellikler ile tek düğümlü bir küme oluşturulmuştur:

  • Bir NVIDIA Tesla K80 GPU’ya sahip NC6 VM boyutunu kullanır. Azure, farklı NVIDIA GPU'ları ile çeşitli VM boyutları sunar.
  • Kapsayıcı tabanlı uygulamaları barındırmak için tasarlanmış varsayılan bir Ubuntu Server görüntüsü çalıştırır. Bu dağıtımda eğitim çoğu iş yükünü çalıştırabilirsiniz.
  • myusername adlı bir kullanıcı hesabı ekler ve yerel ortamınızdaki varsayılan anahtar konumunda (~/.ssh) zaten yoksa SSH anahtarları oluşturur.
az batchai cluster create \
    --name mycluster \
    --workspace myworkspace \
    --resource-group myResourceGroup \
    --vm-size Standard_NC6 \
    --target 1 \
    --user-name myusername \
    --generate-ssh-keys

Komut çıkışı, küme özelliklerini gösterir. Düğümü oluşturup başlatmak birkaç dakika sürer. Kümenin durumunu görmek için az batchai cluster show komutunu çalıştırın.

az batchai cluster show \
    --name mycluster \
    --workspace myworkspace \
    --resource-group myResourceGroup \
    --output table

Küme oluşturmanın erken aşamalarında, çıkış aşağıdakine benzer ve kümenin resizing olduğunu gösterir:

Name       Resource Group    Workspace    VM Size       State      Idle    Running    Preparing    Leaving    Unusable
---------  ----------------  -----------  ------------  -------  ------  ---------  -----------  ---------  ----------
mycluster  myResourceGroup   myworkspace  STANDARD_NC6  resizing      0          0            0          0           0

Küme durumu değiştirilirken eğitim betiğini karşıya yüklemek ve eğitim işini oluşturmak için aşağıdaki adımları uygulayın. Durum steady olduğunda ve tek düğüm Idle olduğunda küme eğitim işini çalıştırmak için hazırdır.

Eğitim betiğini karşıya yükleme

Eğitim betiğiniz ve eğitim çıkışınızı depolamak üzere bir depolama hesabı oluşturmak için az storage account create komutunu kullanın.

az storage account create \
    --resource-group myResourceGroup \
    --name mystorageaccount \
    --location eastus2 \
    --sku Standard_LRS

az storage share create komutunu kullanarak hesapta myshare adlı bir Azure dosya paylaşımı oluşturun:

az storage share create \
    --name myshare \
    --account-name mystorageaccount

Azure dosya paylaşımında dizin oluşturmak için az storage directory create komutunu kullanın. Eğitim betiği için scripts dizinin ve eğitim çıkışı için logs öğesini oluşturun:

# Create /scripts directory in file share
az storage directory create \
    --name scripts \
    --share-name myshare \
    --account-name mystorageaccount

# Create /logs directory in file share 
az storage directory create \
    --name logs \
    --share-name myshare \
    --account-name mystorageaccount

Bash kabuğunuzda, yerel bir çalışma dizini oluşturun ve TensorFlow convolutional.py örneğini indirin. Python betiği, 0’dan 9’a kadar 60.000 el yazısı sayıyı içeren MNIST görüntü kümesinde kıvrımlı bir sinir ağını eğitir. Daha sonra modeli bir dizi test örneğiyle test eder.

wget https://raw.githubusercontent.com/tensorflow/models/master/tutorials/image/mnist/convolutional.py

az storage file upload komutunu kullanarak betiği paylaşımda scripts dizinine yükleyin.

az storage file upload \
    --share-name myshare \
    --path scripts \
    --source convolutional.py \
    --account-name mystorageaccount

Eğitim işi gönderme

İlk olarak, az batchai experiment create komutunu kullanarak çalışma alanınızda bir Batch AI denemesi oluşturun. Deneme, ilgili Batch AI işleri için kullanılan mantıksal kapsayıcıdır.

az batchai experiment create \
    --name myexperiment \
    --workspace myworkspace \
    --resource-group myResourceGroup

Çalışma dizininizde aşağıdaki içeriğe sahip job.json adlı bir eğitim iş yapılandırma dosyası oluşturun. Eğitim işini gönderdiğinizde bu yapılandırma dosyasını geçirirsiniz.

Bu job.json dosyası Python betik dosyasını bulup GPU düğümündeki bir TensorFlow kapsayıcısında çalıştırmak için ayarları içerir. Ayrıca, işin çıkış dosyalarının Azure depolamada kaydedileceği konumu belirtir. <AZURE_BATCHAI_STORAGE_ACCOUNT> depolama hesabı adının iş gönderme sırasında belirtileceğini gösterir.

{
    "$schema": "https://raw.githubusercontent.com/Azure/BatchAI/master/schemas/2018-05-01/job.json",
    "properties": {
        "nodeCount": 1,
        "tensorFlowSettings": {
            "pythonScriptFilePath": "$AZ_BATCHAI_JOB_MOUNT_ROOT/myshare/scripts/convolutional.py"
        },
        "stdOutErrPathPrefix": "$AZ_BATCHAI_JOB_MOUNT_ROOT/myshare/logs",
        "mountVolumes": {
            "azureFileShares": [
                {
                    "azureFileUrl": "https://<AZURE_BATCHAI_STORAGE_ACCOUNT>.file.core.windows.net/myshare",
                    "relativeMountPath": "myshare"
                }
            ]
        },
        "containerSettings": {
            "imageSourceRegistry": {
                "image": "tensorflow/tensorflow:1.8.0-gpu"
            }
        }
    }
}

Düğümde işi göndermek için, job.json yapılandırma dosyasını ve depolama hesabınızın adını geçirerek az batchai job create komutunu kullanın:

az batchai job create \
    --name myjob \
    --cluster mycluster \
    --experiment myexperiment \
    --workspace myworkspace \
    --resource-group myResourceGroup \
    --config-file job.json \
    --storage-account-name mystorageaccount

Komut iş özelliklerini döndürür ve tamamlanması birkaç dakika sürer. Bu işin ilerleyişini izlemek için, stdout-wk-0.txt dosyasının düğümdeki standart çıkış dizininden akışını yapmak üzere az batchai job file stream komutunu kullanın. Eğitim betiği, iş çalıştırılmaya başladıktan sonra bu dosyayı oluşturur.

az batchai job file stream \
    --job myjob \
    --experiment myexperiment \
    --workspace myworkspace \
    --resource-group myResourceGroup \
    --file-name stdout-wk-0.txt

Örnek çıktı:

File found with URL "https://mystorageaccount.file.core.windows.net/logs/00000000-0000-0000-0000-000000000000/myResourceGroup/workspaces/myworkspace/experiments/myexperiment/jobs/myjob/<JOB_ID>/stdouterr/stdout-wk-0.txt?sv=2016-05-31&sr=f&sig=Kih9baozMao8Ugos%2FVG%2BcsVsSeY1O%2FTocCNvLQhwtx4%3D&se=2018-06-20T22%3A07%3A30Z&sp=rl". Start streaming
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Step 0 (epoch 0.00), 14.9 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 9.7 ms
Minibatch loss: 3.240, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.7%
Step 200 (epoch 0.23), 8.3 ms
Minibatch loss: 3.335, learning rate: 0.010000
Minibatch error: 7.8%
Validation error: 4.5%
Step 300 (epoch 0.35), 8.3 ms
Minibatch loss: 3.157, learning rate: 0.010000
Minibatch error: 3.1%
...
Step 8500 (epoch 9.89), 8.3 ms
Minibatch loss: 1.605, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Test error: 0.8%

İş tamamlandığında akış durdurulur. Örnek betik 10’un üzerinde dönem eğitir veya eğitim veri kümesinden geçer. Bu örnekte, 10 dönemden sonra, eğitilen model yalnızca %0,8 oranında test hatası ile çalışır.

İş çıkışı alma

Batch AI, her işin çıkışı için depolama hesabında benzersiz bir klasör yapısı oluşturur. JOB_OUTPUT_PATH ortam değişkenini bu yol ile ayarlayın. Daha sonra, az storage file list komutunu kullanarak depolama alanındaki çıkış dosyalarını listeleyin:

export JOB_OUTPUT_PATH=$(az batchai job show --name myjob --experiment myexperiment --workspace myworkspace --resource-group myResourceGroup --query jobOutputDirectoryPathSegment --output tsv)

az storage file list \
    --share-name myshare/logs \
    --account-name mystorageaccount \
    --path $JOB_OUTPUT_PATH/stdouterr \
    --output table

Çıkış şuna benzer olacaktır:

Name               Content Length  Type    Last Modified
---------------  ----------------  ------  ---------------
execution.log               14866  file
stderr-wk-0.txt              1527  file
stdout-wk-0.txt             11027  file

Bir veya daha fazla dosyayı yerel çalışma dizininize indirmek için az storage file download komutunu kullanın. Örnek:

az storage file download \
    --share-name myshare/logs \
    --account-name mystorageaccount \
    --path $JOB_OUTPUT_PATH/stdouterr/stdout-wk-0.txt

Kaynakları temizleme

Batch AI öğreticileri ve örnekleri ile devam etmek istiyorsanız, bu hızlı başlangıçta oluşturulan Batch AI çalışma alanı, kümesi ve depolama hesabını kullanın.

Düğümler çalışırken Batch AI kümesi için ücret ödersiniz. Çalıştırılacak iş olmadığında küme yapılandırmasını tutmak istiyorsanız, kümeyi 0 düğüm olarak yeniden boyutlandırın.

az batchai cluster resize \
    --name mycluster \
    --workspace myworkspace \
    --resource-group myResourceGroup \
    --target 0

Daha sonra, işlerinizi çalıştırmak için 1 veya daha fazla düğüm olarak yeniden boyutlandırın. Bir kümeye artık ihtiyacınız olmadığında, az batchai cluster delete komutu ile silebilirsiniz:

az batchai cluster delete \
    --name mycluster \
    --workspace myworkspace \
    --resource-group myResourceGroup

Artık gerekli değilse, az group delete komutunu kullanarak Batch AI ve depolama kaynakları için kaynak grubunu kaldırabilirsiniz.

az group delete --name myResourceGroup

Sonraki adımlar

Bu hızlı başlangıçta, Azure CLI kullanarak tek GPU’lu bir VM üzerinde örnek bir TensorFlow derin öğrenme modelini eğitmek için Batch AI kullanmayı öğrendiniz. Daha geniş bir GPU kümesinde model eğitimini dağıtmak için, Batch AI öğreticisi ile devam edin.