Öğretici: İlk makine öğrenmesi modelinizi eğitin (bölüm 2/ 3)

Bu öğreticide, bir makine öğrenmesi modelini Azure Machine Learning. Bu öğretici, üç bölümden bir öğretici serisinin 2. bölümü.

1. Bölüm: "Merhaba dünya!" serisinde, bulutta bir işi çalıştırmak için denetim betiği kullanmayı öğrendinsiniz.

Bu öğreticide, bir makine öğrenmesi modeli eğiten bir betik göndererek bir sonraki adımı atıyoruz. Bu örnek, yerel hata ayıklama Azure Machine Learning uzak çalıştırmalar arasındaki tutarlı davranışı nasıl kolaylaştıran bir işlem olduğunu anlamanıza yardımcı olur.

Bu öğreticide şunları yaptınız:

  • Eğitim betiği oluşturun.
  • Conda'yı kullanarak bir Azure Machine Learning tanımlayın.
  • Denetim betiği oluşturun.
  • Sınıf Azure Machine Learning ( Environment , Run , ). Metrics
  • Eğitim betiğinizi gönderin ve çalıştırın.
  • Kod çıktınızı bulutta görüntüleme.
  • Ölçümleri günlüğe Azure Machine Learning.
  • Ölçümlerinizi bulutta görüntüleme.

Önkoşullar

  • Serinin 1. bölümü tamamlandıktan sonra.

Eğitim betikleri oluşturma

İlk olarak sinir ağı mimarisini bir model.py tanımlayın. Tüm eğitim kodunuz, model.py dahil src olmak üzere alt model.py.

Eğitim kodu, PyTorch'tan bu giriş örneğinden alınarak alınır. Bu kavramlar Azure Machine Learning PyTorch'a değil tüm makine öğrenmesi kodlara uygulanır.

  1. src model.py bir dosya oluşturun. Bu kodu dosyaya kopyalayın:

    import torch.nn as nn
    import torch.nn.functional as F
    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.conv1 = nn.Conv2d(3, 6, 5)
            self.pool = nn.MaxPool2d(2, 2)
            self.conv2 = nn.Conv2d(6, 16, 5)
            self.fc1 = nn.Linear(16 * 5 * 5, 120)
            self.fc2 = nn.Linear(120, 84)
            self.fc3 = nn.Linear(84, 10)
        def forward(self, x):
            x = self.pool(F.relu(self.conv1(x)))
            x = self.pool(F.relu(self.conv2(x)))
            x = x.view(-1, 16 * 5 * 5)
            x = F.relu(self.fc1(x))
            x = F.relu(self.fc2(x))
            x = self.fc3(x)
            return x
    
  2. Dosyayı kaydetmek için araç çubuğunda Kaydet'i seçin. Isterseniz sekmesini kapatın.

  3. Ardından, src alt klasörüne de eğitim betiği tanımlayın. Bu betik PyTorch API'lerini kullanarak CIFAR10 veri kümesi indirir, model.py'da tanımlanan ağı ayarlar ve standart SGD ve çapraz entropi kaybı kullanarak iki dönem için torchvision.dataset eğiter.

    src train.py betiği oluşturun:

    import torch
    import torch.optim as optim
    import torchvision
    import torchvision.transforms as transforms
    
    from model import Net
    
    # download CIFAR 10 data
    trainset = torchvision.datasets.CIFAR10(
        root="../data",
        train=True,
        download=True,
        transform=torchvision.transforms.ToTensor(),
    )
    trainloader = torch.utils.data.DataLoader(
        trainset, batch_size=4, shuffle=True, num_workers=2
    )
    
    if __name__ == "__main__":
    
        # define convolutional network
        net = Net()
    
        # set up pytorch loss /  optimizer
        criterion = torch.nn.CrossEntropyLoss()
        optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
    
        # train the network
        for epoch in range(2):
    
            running_loss = 0.0
            for i, data in enumerate(trainloader, 0):
                # unpack the data
                inputs, labels = data
    
                # zero the parameter gradients
                optimizer.zero_grad()
    
                # forward + backward + optimize
                outputs = net(inputs)
                loss = criterion(outputs, labels)
                loss.backward()
                optimizer.step()
    
                # print statistics
                running_loss += loss.item()
                if i % 2000 == 1999:
                    loss = running_loss / 2000
                    print(f"epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}")
                    running_loss = 0.0
    
        print("Finished Training")
    
  4. Artık aşağıdaki klasör yapısına sahipsiniz:

    Dizin yapısı src train.py dizinde dizinleri gösterir

Yerel olarak test

Komut dosyasını doğrudan işlem örneğinde çalıştırmak için Kaydet ve terminalde betiği train.py çalıştır'ı seçin.

Betik tamamlandıktan sonra dosya klasörlerinin üst tarafından Yenile'yi seçin. get-started/data adlı yeni veri klasörünü, indirilen verileri görüntülemek için bu klasörü genişletin olarak görünür.

Klasörü yerel olarak çalıştırarak oluşturulan yeni veri klasörünü gösteren klasörlerin ekran görüntüsü.

Denetim betiği oluşturma

Aşağıdaki denetim betiği ile "Merhaba dünya!" , ortamı ayarlamak için birkaç ek satır eklemenizdir.

get-started klasöründe adlı yeni bir Python dosyası run-pytorch.py oluşturun:

# run-pytorch.py
from azureml.core import Workspace
from azureml.core import Experiment
from azureml.core import Environment
from azureml.core import ScriptRunConfig

if __name__ == "__main__":
    ws = Workspace.from_config()
    experiment = Experiment(workspace=ws, name='day1-experiment-train')
    config = ScriptRunConfig(source_directory='./src',
                             script='train.py',
                             compute_target='cpu-cluster')

    # use curated pytorch environment 
    env = ws.environments['AzureML-PyTorch-1.6-CPU']
    config.run_config.environment = env

    run = experiment.submit(config)

    aml_url = run.get_portal_url()
    print(aml_url)

İpucu

İşlem kümenizi oluşturulduğunda farklı bir ad kullandıysanız, kodda adı da ayarlasanız compute_target='cpu-cluster' emin olun.

Kod değişikliklerini anlama

env = ...

Azure Machine Learning, denemeleri çalıştırmaya ait yenidenlanabilir, sürüme sahip bir Python ortamını temsil eden bir ortam kavramı sağlar. Burada, özel ortamlardan birini kullanırsınız. Ayrıca yerel bir Conda veya pip ortamından ortam oluşturmak da kolaydır.

config.run_config.environment = env

Çalıştırmayı Azure Machine Learning

  1. Terminalde betiği kaydet ve çalıştır'ı seçerek run-pytorch.py çalıştırın.

  2. Terminal penceresinde açılan bir bağlantı görüntülenir. Çalıştırmayı görüntülemek için bağlantıyı seçin.

    Not

    Yükleme sırasında hata... ile başlayan bazı azureml_run_type_providers. Bu uyarıları yoksayabilirsiniz. Çıkışınızı görüntülemek için bu uyarıların altındaki bağlantıyı kullanın.

Çıkışı görüntüleme

  1. Açılan sayfada çalıştırma durumunu görebilirsiniz. Bu betiği ilk kez çalıştıracak Azure Machine Learning PyTorch ortamınıza yeni bir Docker görüntüsü derlemeniz gerekir. Çalıştırmanın tamamının tamamlanması 3-4 dakika sürebilir. Bu görüntü, daha hızlı çalışması için gelecek çalıştırmalarda yeniden kullanılır.
  2. Docker derleme günlüklerini Azure Machine Learning studio'da görüntüleyebilirsiniz. Çıkışlar + günlükler sekmesini seçin ve sonra da20_image_build_log.txt. ****
  3. Çalıştırmanın durumu Tamamlandı olduğunda Çıkış+ günlükler'i seçin.
  4. Çalıştırmanın 70_driver_log.txt görüntülemek için70_driver_log.txt'yi seçin.
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz
...
Files already downloaded and verified
epoch=1, batch= 2000: loss 2.19
epoch=1, batch= 4000: loss 1.82
epoch=1, batch= 6000: loss 1.66
epoch=1, batch= 8000: loss 1.58
epoch=1, batch=10000: loss 1.52
epoch=1, batch=12000: loss 1.47
epoch=2, batch= 2000: loss 1.39
epoch=2, batch= 4000: loss 1.38
epoch=2, batch= 6000: loss 1.37
epoch=2, batch= 8000: loss 1.33
epoch=2, batch=10000: loss 1.31
epoch=2, batch=12000: loss 1.27
Finished Training

Bir hata Your total snapshot size exceeds the limit görüyorsanız, veri klasörü içinde kullanılan source_directory değerde ScriptRunConfig bulunur.

Klasörün sonundaki ... öğesini seçin ve ardından verileri get-started klasörüne taşımak için Taşı'ya tıklayın.

Günlük eğitim ölçümleri

Artık bazı performans ölçümlerini izlemeye Azure Machine Learning model eğitimine sahipsiniz.

Geçerli eğitim betiği, ölçümleri terminale yazdırır. Azure Machine Learning işlevleriyle ölçümleri günlüğe kaydetmeye olanak sağlayan bir mekanizma sağlar. Birkaç kod satırı ekleyerek studio'da ölçümleri görselleştirme ve birden çok çalıştırma arasındaki ölçümleri karşılaştırma olanağı elde edilir.

Günlük train.py eklemek için ayarları değiştirme

  1. İki train.py kod içerecek şekilde dosya betiğinizi değiştirme:

    import torch
    import torch.optim as optim
    import torchvision
    import torchvision.transforms as transforms
    from model import Net
    from azureml.core import Run
    # ADDITIONAL CODE: get run from the current context
    run = Run.get_context()
    # download CIFAR 10 data
    trainset = torchvision.datasets.CIFAR10(
        root='./data',
        train=True,
        download=True,
        transform=torchvision.transforms.ToTensor()
    )
    trainloader = torch.utils.data.DataLoader(
        trainset,
        batch_size=4,
        shuffle=True,
        num_workers=2
    )
    if __name__ == "__main__":
        # define convolutional network
        net = Net()
        # set up pytorch loss /  optimizer
        criterion = torch.nn.CrossEntropyLoss()
        optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
        # train the network
        for epoch in range(2):
            running_loss = 0.0
            for i, data in enumerate(trainloader, 0):
                # unpack the data
                inputs, labels = data
                # zero the parameter gradients
                optimizer.zero_grad()
                # forward + backward + optimize
                outputs = net(inputs)
                loss = criterion(outputs, labels)
                loss.backward()
                optimizer.step()
                # print statistics
                running_loss += loss.item()
                if i % 2000 == 1999:
                    loss = running_loss / 2000
                    # ADDITIONAL CODE: log loss metric to AML
                    run.log('loss', loss)
                    print(f'epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}')
                    running_loss = 0.0
        print('Finished Training')
    
  2. Bu dosyayı kaydedin ve isterseniz sekmeyi kapatın.

Ek iki kod satırı anlama

Bu train.py, yöntemini kullanarak eğitim betiğinden çalıştırma nesnesine erişiyor ve ölçümleri günlüğe günlüğe Run.get_context() kaydettiriyor:

# ADDITIONAL CODE: get run from the current context
run = Run.get_context()

...
# ADDITIONAL CODE: log loss metric to AML
run.log('loss', loss)

Ölçümler Azure Machine Learning:

  • Deneme ve çalıştırmaya göre düzenlenmiştir, bu nedenle ölçümleri izlemek ve karşılaştırmak kolaydır.
  • Studio'da eğitim performansını görselleştirmek için bir kullanıcı arabirimiyle donatıldı.
  • Yüzlerce deneme çalıştırarak bile bu avantajları elde tutmanın yanı sıra ölçeklendirmek için tasarlanmıştır.

Çalıştırmayı Azure Machine Learning

Run-pytorch.py betiği için sekmeyi seçin, sonra da betiği terminalde kaydet ve çalıştır'ı seçerek run-pytorch.py çalıştırın.

Bu kez stüdyoyı ziyaret edin, Ölçümler sekmesine gidin; burada model eğitim kaybıyla ilgili canlı güncelleştirmeleri görebilirsiniz! Eğitim başlamadan önce 1-2 dakika sürebilir.

Ölçümler sekmesindeki eğitim kaybı grafiği.

Sonraki adımlar

Bu oturumda temel bir "Merhaba dünya!" betiği, belirli bir Python ortamının çalışması için gerekli olan daha gerçekçi bir eğitim betiğine yöneliktir. Özel ortamlar için nasıl Azure Machine Learning görmüştün. Son olarak birkaç kod satırıyla ölçümleri günlüğe Azure Machine Learning.

Bir pip requirements.txtdosyasından veya mevcut bir yerel Conda ortamından dahil olmak Azure Machine Learning ortamlar oluşturmanın başka yolları da vardır.

Bir sonraki oturumda CIFAR10 veri Azure Machine Learning Azure'a yükerek verilerle nasıl çalışabilirsiniz?

Not

Öğretici serisini burada tamamlamak ve sonraki adıma ilerlemek istemiyorsanız kaynaklarınızı temizlemeyi unutmayın.