Aracılığıyla paylaş


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

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

Bu öğreticide, Azure Machine Learning'de makine öğrenmesi modelini eğitmeyi öğreneceksiniz. Bu öğretici, iki bölümden oluşan bir öğretici serisinin 2. bölümüdür.

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

Bu öğreticide, bir makine öğrenmesi modelini eğiten bir betik göndererek sonraki adımı atacaksınız. Bu örnek, Azure Machine Learning'in yerel hata ayıklama ve uzak çalıştırmalar arasındaki tutarlı davranışı nasıl kolaylaştırdığınızı anlamanıza yardımcı olur.

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

  • Eğitim betiği oluşturma.
  • Azure Machine Learning ortamı tanımlamak için Conda kullanın.
  • Bir denetim betiği oluşturun.
  • Azure Machine Learning sınıflarını (Environment, Run, Metrics) anlama.
  • Eğitim betiğinizi gönderin ve çalıştırın.
  • Kod çıkışınızı bulutta görüntüleyin.
  • Ölçümleri Azure Machine Learning'de günlüğe kaydetme.
  • Ölçümlerinizi bulutta görüntüleyin.

Önkoşullar

  • Serinin 1 . bölümünün tamamlanması.

Eğitim betikleri oluşturma

İlk olarak sinir ağı mimarisini bir model.py dosyasında tanımlarsınız. Model.py dahil olmak üzere tüm eğitim kodunuz alt dizine src gider.

Eğitim kodu, PyTorch'un bu giriş örneğinden alınmıştır. Azure Machine Learning kavramları yalnızca PyTorch için değil tüm makine öğrenmesi kodları için geçerlidir.

  1. src alt klasöründe bir model.py dosyası 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. İstersen, sekmeyi kapatın.

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

    src alt klasöründe bir 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 alt dizininde train.py gösteriyor

Yerel olarak test edin

train.py betiğini doğrudan işlem örneğinde çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin.

Betik tamamlandıktan sonra dosya klasörlerinin üstündeki Yenile'yi seçin. İndirilen verileri görüntülemek için get-started/data Bu klasörü genişlet adlı yeni veri klasörünü görürsünüz.

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

Python ortamı oluşturma

Azure Machine Learning, denemeleri çalıştırmak için yeniden üretilebilir, sürüme dönüştürülen bir Python ortamını temsil eden bir ortam kavramı sağlar. Yerel conda veya pip ortamından ortam oluşturmak kolaydır.

İlk olarak paket bağımlılıklarıyla bir dosya oluşturursunuz.

  1. Başlarken klasöründe adlı pytorch-env.ymlyeni bir dosya oluşturun:

    name: pytorch-env
    channels:
        - defaults
        - pytorch
    dependencies:
        - python=3.7
        - pytorch
        - torchvision
    
  2. Dosyayı kaydetmek için araç çubuğunda Kaydet'i seçin. İstersen, sekmeyi kapatın.

Denetim betiğini oluşturma

Aşağıdaki denetim betiği ile "Merhaba dünya!" göndermek için kullandığınız betik arasındaki fark, ortamı ayarlamak için birkaç ek satır eklemenizdir.

Get-started klasöründe adlı run-pytorch.pyyeni bir Python dosyası 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')

    # set up pytorch environment
    env = Environment.from_conda_specification(
        name='pytorch-env',
        file_path='pytorch-env.yml'
    )
    config.run_config.environment = env

    run = experiment.submit(config)

    aml_url = run.get_portal_url()
    print(aml_url)

İpucu

İşlem kümenizi oluştururken farklı bir ad kullandıysanız koddaki compute_target='cpu-cluster' adı da ayarladığınızdan emin olun.

Kod değişikliklerini anlama

env = ...

Yukarıda oluşturduğunuz bağımlılık dosyasına başvurur.

config.run_config.environment = env

Ortamı ScriptRunConfig'e ekler.

Çalıştırmayı Azure Machine Learning'e gönderme

  1. run-pytorch.py betiğini çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin.

  2. Açılan terminal penceresinde bir bağlantı görürsünüz. İşi görüntülemek için bağlantıyı seçin.

    Not

    azureml_run_type_providers yüklenirken Hata ile başlayan bazı uyarılar görebilirsiniz.... 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 iş durumunu görürsünüz. Bu betiği ilk kez çalıştırdığınızda, Azure Machine Learning PyTorch ortamınızdan yeni bir Docker görüntüsü oluşturur. tüm işin tamamlanması yaklaşık 10 dakika sürebilir. Bu görüntü, daha hızlı çalışmasını sağlamak için gelecekteki işlerde yeniden kullanılır.
  2. Docker derleme günlüklerini Azure Machine Learning stüdyosu görebilirsiniz. derleme günlüklerini görüntülemek için:
    1. Çıkışlar + günlükler sekmesini seçin.
    2. azureml-logs klasörünü seçin.
    3. 20_image_build_log.txt'ı seçin.
  3. İşin durumu Tamamlandı olduğunda Çıkış + günlükler'i seçin.
  4. user_logs'ı seçin ve ardından işinizin çıkışını görüntülemek için std_log.txt.
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ../data/cifar-10-python.tar.gz
Extracting ../data/cifar-10-python.tar.gz to ../data
epoch=1, batch= 2000: loss 2.19
epoch=1, batch= 4000: loss 1.82
epoch=1, batch= 6000: loss 1.66
...
epoch=2, batch= 8000: loss 1.51
epoch=2, batch=10000: loss 1.49
epoch=2, batch=12000: loss 1.46
Finished Training

hatasını Your total snapshot size exceeds the limitgörürseniz, veri klasörü içinde kullanılan değerde source_directory ScriptRunConfigbulunur.

Klasörün sonundaki ... öğesini seçin ve ardından Verileri başlarken klasörüne taşımak için Taşı'yı seçin.

Eğitim ölçümlerini günlüğe kaydetme

Artık Azure Machine Learning'de bir model eğitimine sahip olduğunuz için bazı performans ölçümlerini izlemeye başlayın.

Geçerli eğitim betiği ölçümleri terminale yazdırır. Azure Machine Learning, ölçümleri daha fazla işlevle günlüğe kaydetmeye yönelik bir mekanizma sağlar. Birkaç kod satırı ekleyerek, stüdyodaki ölçümleri görselleştirme ve birden çok iş arasındaki ölçümleri karşılaştırma olanağı elde edebilirsiniz.

train.py günlüğü içerecek şekilde değiştirme

  1. train.py betiğinizi iki kod satırı daha içerecek şekilde değiştirin:

    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

train.py, yöntemini kullanarak eğitim betiğinin içinden çalıştırma nesnesine Run.get_context() erişip ölçümleri günlüğe kaydetmek için bunu kullanırsınız:

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

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

Azure Machine Learning'deki ölçümler şunlardır:

  • Deneme ve çalıştırmaya göre düzenlenerek ölçümleri takip etmek ve karşılaştırmak kolaydır.
  • Stüdyoda eğitim performansını görselleştirebilmeniz için bir kullanıcı arabirimi ile donatılmıştır.
  • Ölçeklendirilecek şekilde tasarlanmıştır, böylece yüzlerce deneme çalıştırırken bile bu avantajları koruyabilirsiniz.

Conda ortam dosyasını güncelleştirme

Betik train.py üzerinde yeni bir bağımlılık azureml.corealdı. Bu değişikliği yansıtacak şekilde güncelleştirin pytorch-env.yml :

name: pytorch-env
channels:
    - defaults
    - pytorch
dependencies:
    - python=3.7
    - pytorch
    - torchvision
    - pip
    - pip:
        - azureml-sdk

Çalıştırmayı göndermeden önce bu dosyayı kaydettiğinizden emin olun.

Çalıştırmayı Azure Machine Learning'e gönderme

run-pytorch.py betiğinin sekmesini seçin ve ardından run-pytorch.py betiğini yeniden çalıştırmak için Betiği terminalde kaydet ve çalıştır'ı seçin. İlk olarak değişikliklerinizi kaydettiğinizden pytorch-env.yml emin olun.

Bu kez stüdyoyu ziyaret ettiğinizde, artık model eğitim kaybıyla ilgili canlı güncelleştirmeleri görebileceğiniz Ölçümler sekmesine gidin! Eğitimin başlaması 1-2 dakika sürebilir.

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

Kaynakları temizleme

Şimdi başka bir öğreticiye devam etmek veya kendi eğitim işlerinizi başlatmak istiyorsanız İlgili kaynaklar'a atlayın.

İşlem örneğini durdurma

Şimdi kullanmayacaksanız işlem örneğini durdurun:

  1. Stüdyoda, sol tarafta İşlem'i seçin.
  2. Üst sekmelerde İşlem örnekleri'ni seçin
  3. Listeden işlem örneğini seçin.
  4. Üst araç çubuğunda Durdur'u seçin.

Tüm kaynakları silme

Önemli

Oluşturduğunuz kaynaklar, diğer Azure Machine Learning öğreticileri ve nasıl yapılır makaleleri için önkoşul olarak kullanılabilir.

Oluşturduğunuz kaynaklardan hiçbirini kullanmayı planlamıyorsanız, ücret ödememek için bunları silin:

  1. Azure portalının en sol tarafındaki Kaynak gruplarını seçin.

  2. Listeden, oluşturduğunuz kaynak grubunu seçin.

  3. Kaynak grubunu sil'i seçin.

    Azure portalında kaynak grubunu silme seçimlerinin ekran görüntüsü.

  4. Kaynak grubu adını girin. Ardından Sil'i seçin.

Ayrıca kaynak grubunu koruyabilir, ancak tek bir çalışma alanını silebilirsiniz. Çalışma alanı özelliklerini görüntüleyin ve Sil'i seçin.

Bu oturumda, temel bir "Merhaba dünya!" betiğinden belirli bir Python ortamının çalıştırılmasını gerektiren daha gerçekçi bir eğitim betiğine yükselttiniz. Seçilmiş Azure Machine Learning ortamlarının nasıl kullanılacağını gördünüz. Son olarak, birkaç kod satırıyla ölçümleri Azure Machine Learning'de nasıl günlüğe kaydedebileceğinizi gördünüz.

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