Aracılığıyla paylaş


Örnek: Azure Machine Learning tasarımcısıyla özel beceri oluşturma ve dağıtma (Arşivlenmiş)

Bu örnek arşivlenmiş ve destek dışıdır. Azure Machine Learning tasarımcısının regresyon ve sınıflandırma gibi görevler için makine öğrenmesi modelleri oluşturmak üzere kullanımı kolay bir etkileşimli tuval olduğu açıklanmıştır. Tasarımcı tarafından oluşturulan modeli Bilişsel Arama zenginleştirme işlem hattında çağırmak için birkaç ek adım gerekir. Bu örnekte bir otomobilin fiyatını tahmin etmek ve çıkarım uç noktasını AML becerisi olarak çağırmak için basit bir regresyon modeli oluşturacaksınız.

Örnekler işlem hatları & veri kümeleri belge sayfasındaki Regresyon - Otomobil Fiyat Tahmini (Gelişmiş) öğreticisini izleyerek farklı özellikler göz önünde bulundurulduğunda otomobilin fiyatını tahmin eden bir model oluşturun.

Önemli

Modeli gerçek zamanlı çıkarım işleminden sonra dağıtmak geçerli bir uç noktayla sonuçlanır, ancak Bilişsel Arama'da AML becerisiyle kullanabileceğiniz bir uç noktayla sonuçlanmaz.

Modeli kaydetme ve varlıkları indirme

Modeli eğittikten sonra eğitilen modeli kaydedin ve klasördeki trained_model_outputs tüm dosyaları indirmek için adımları izleyin veya model yapıtları sayfasından yalnızca score.py ve conda_env.yml dosyalarını indirin. Model gerçek zamanlı çıkarım uç noktası olarak dağıtılmadan önce puanlama betiğini düzenlersiniz.

Bilişsel Arama zenginleştirme işlem hatları tek bir belge üzerinde çalışır ve tek bir tahmin için girişleri içeren bir istek oluşturur. İndirilen score.py kayıt listesini kabul eder ve tahmin listesini serileştirilmiş JSON dizesi olarak döndürür. İki değişiklik yapacaksınız: score.py

  • Betiği listeyle değil, tek bir giriş kaydıyla çalışacak şekilde düzenleyin
  • Betiği, tahmin edilen fiyat olan tek bir özelliğe sahip bir JSON nesnesi döndürecek şekilde düzenleyin.

İndirilen score.py işlevi açın ve düzenleyin run(data) . işlevi şu anda modelin dosyasında açıklandığı gibi aşağıdaki girişi bekleyecek şekilde ayarlanmıştır _samples.json .

[
  {
    "symboling": 2,
    "make": "mitsubishi",
    "fuel-type": "gas",
    "aspiration": "std",
    "num-of-doors": "two",
    "body-style": "hatchback",
    "drive-wheels": "fwd",
    "engine-location": "front",
    "wheel-base": 93.7,
    "length": 157.3,
    "width": 64.4,
    "height": 50.8,
    "curb-weight": 1944,
    "engine-type": "ohc",
    "num-of-cylinders": "four",
    "engine-size": 92,
    "fuel-system": "2bbl",
    "bore": 2.97,
    "stroke": 3.23,
    "compression-ratio": 9.4,
    "horsepower": 68.0,
    "peak-rpm": 5500.0,
    "city-mpg": 31,
    "highway-mpg": 38,
    "price": 6189.0
  },
  {
    "symboling": 0,
    "make": "toyota",
    "fuel-type": "gas",
    "aspiration": "std",
    "num-of-doors": "four",
    "body-style": "wagon",
    "drive-wheels": "fwd",
    "engine-location": "front",
    "wheel-base": 95.7,
    "length": 169.7,
    "width": 63.6,
    "height": 59.1,
    "curb-weight": 2280,
    "engine-type": "ohc",
    "num-of-cylinders": "four",
    "engine-size": 92,
    "fuel-system": "2bbl",
    "bore": 3.05,
    "stroke": 3.03,
    "compression-ratio": 9.0,
    "horsepower": 62.0,
    "peak-rpm": 4800.0,
    "city-mpg": 31,
    "highway-mpg": 37,
    "price": 6918.0
  },
  {
    "symboling": 1,
    "make": "honda",
    "fuel-type": "gas",
    "aspiration": "std",
    "num-of-doors": "two",
    "body-style": "sedan",
    "drive-wheels": "fwd",
    "engine-location": "front",
    "wheel-base": 96.5,
    "length": 169.1,
    "width": 66.0,
    "height": 51.0,
    "curb-weight": 2293,
    "engine-type": "ohc",
    "num-of-cylinders": "four",
    "engine-size": 110,
    "fuel-system": "2bbl",
    "bore": 3.15,
    "stroke": 3.58,
    "compression-ratio": 9.1,
    "horsepower": 100.0,
    "peak-rpm": 5500.0,
    "city-mpg": 25,
    "highway-mpg": 31,
    "price": 10345.0
  }
]

Değişiklikleriniz, modelin tek bir kayıt olan dizin oluşturma sırasında Bilişsel Arama tarafından oluşturulan girişi kabul etmesini sağlar.

{
    "symboling": 2,
    "make": "mitsubishi",
    "fuel-type": "gas",
    "aspiration": "std",
    "num-of-doors": "two",
    "body-style": "hatchback",
    "drive-wheels": "fwd",
    "engine-location": "front",
    "wheel-base": 93.7,
    "length": 157.3,
    "width": 64.4,
    "height": 50.8,
    "curb-weight": 1944,
    "engine-type": "ohc",
    "num-of-cylinders": "four",
    "engine-size": 92,
    "fuel-system": "2bbl",
    "bore": 2.97,
    "stroke": 3.23,
    "compression-ratio": 9.4,
    "horsepower": 68.0,
    "peak-rpm": 5500.0,
    "city-mpg": 31,
    "highway-mpg": 38,
    "price": 6189.0
}

27 ile 30 arasında olan satırları şununla değiştirin:


    for key, val in data.items():
        input_entry[key].append(decode_nan(val))

Betiğin bir dizeden JSON nesnesine oluşturduğu çıkışı da düzenlemeniz gerekir. Özgün dosyadaki return deyimini (satır 37) şu şekilde düzenleyin:

    output = result.data_frame.values.tolist()
    return {
        "predicted_price": output[0][-1]
    }

Giriş biçimindeki değişiklikleri ve tek bir kaydı giriş olarak kabul edecek ve tahmin edilen fiyatla bir JSON nesnesi döndürecek tahmini çıkışı içeren güncelleştirilmiş run işlev aşağıdadır.

def run(data):
    data = json.loads(data)
    input_entry = defaultdict(list)
    # data is now a JSON object not a list of JSON objects
    for key, val in data.items():
        input_entry[key].append(decode_nan(val))

    data_frame_directory = create_dfd_from_dict(input_entry, schema_data)
    score_module = ScoreModelModule()
    result, = score_module.run(
        learner=model,
        test_data=DataTable.from_dfd(data_frame_directory),
        append_or_result_only=True)
    #return json.dumps({"result": result.data_frame.values.tolist()})
    output = result.data_frame.values.tolist()
    # return the last column of the the first row of the dataframe
    return  {
        "predicted_price": output[0][-1]
    }

Modeli kaydetme ve dağıtma

Değişiklikleriniz kaydedildikten sonra modeli portala kaydedebilirsiniz. Modeli kaydet'i seçin ve geçerli bir ad verin. Model Framework için, Custom Çerçeve Adı ve 1.0 Çerçeve Sürümü için öğesini seçinOther. seçeneğini belirleyin Upload folder ve güncelleştirilmiş score.py ve conda_env.yamlklasörünü seçin.

Modeli seçin ve eylemde öğesini Deploy seçin. Dağıtım adımında, sağlanan bir AKS çıkarım kümesine sahip olduğunuz varsayılır. Kapsayıcı örnekleri şu anda Bilişsel Arama'da desteklenmemektedir.

  1. Geçerli bir uç nokta adı sağlayın
  2. İşlem türünü seçin Azure Kubernetes Service
  3. Çıkarım kümeniz için işlem adını seçin
  4. Açık konuma getirin enable authentication
  5. Tür için seçin Key-based authentication
  6. Güncelleştirilen score.py öğesini seçin entry script file
  7. Öğesini seçin conda_env.yamlconda dependencies file
  8. Yeni uç noktanızı dağıtmak için dağıt düğmesini seçin.

Yeni oluşturulan uç noktayı Bilişsel Arama ile tümleştirmek için

  1. Blob kapsayıcısına tek bir otomobil kaydı içeren bir JSON dosyası ekleme
  2. Verileri içeri aktarma sihirbazını kullanarak yapay zeka zenginleştirme işlem hattını yapılandırın. Aşağıdaki gibi bir seçim JSON yapmaya özen gösterin: parsing mode
  3. Add Enrichments Sekmesinde yer tutucu olarak tek bir beceri Extract people names seçin.
  4. dizinine türünde Edm.Doubleadlı predicted_price yeni bir alan ekleyin ve Alınabilir özelliğini true olarak ayarlayın.
  5. veri içeri aktarma işlemini tamamlama

AML Becerisini beceri kümesine ekleme

Beceri kümeleri listesinden oluşturduğunuz beceri kümesini seçin. Şimdi, fiyatları tahmin etmek için kişi tanımlama becerisini AML becerisiyle değiştirmek için beceri kümesini düzenleyebilirsiniz. Beceri Kümesi Tanımı (JSON) sekmesinde beceri açılan listesinden seçim yapın Azure Machine Learning (AML) . AML becerisinin uç noktanızı bulması için çalışma alanı ve arama hizmetinin aynı Azure aboneliğinde olması gerekir. Öğreticide daha önce oluşturduğunuz uç noktayı seçin. Becerinin, uç noktayı dağıttığınızda yapılandırıldığı gibi URI ve kimlik doğrulama bilgileriyle doldurulduğunu doğrulayın. Beceri şablonunu kopyalayın ve beceri kümesindeki beceriyi değiştirin. Beceriyi düzenleyerek:

  1. Adı geçerli bir ad olarak ayarlama
  2. Açıklama ekleme
  3. DegreesOfParallelism değerini 1 olarak ayarlayın
  4. Bağlamı şu şekilde ayarlayın: /document
  5. Girişleri tüm gerekli girişlere ayarlayın, aşağıdaki örnek beceri tanımına bakın
  6. Döndürülen tahmini fiyatı yakalamak için çıkışları ayarlayın.
{
      "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
      "name": "AMLdemo",
      "description": "AML Designer demo",
      "context": "/document",
      "uri": "Your AML endpoint",
      "key": "Your AML endpoint key",
      "resourceId": null,
      "region": null,
      "timeout": "PT30S",
      "degreeOfParallelism": 1,
      "inputs": [
        {
          "name": "symboling",
          "source": "/document/symboling"
        },
        {
          "name": "make",
          "source": "/document/make"
        },
        {
          "name": "fuel-type",
          "source": "/document/fuel-type"
        },
        {
          "name": "aspiration",
          "source": "/document/aspiration"
        },
        {
          "name": "num-of-doors",
          "source": "/document/num-of-doors"
        },
        {
          "name": "body-style",
          "source": "/document/body-style"
        },
        {
          "name": "drive-wheels",
          "source": "/document/drive-wheels"
        },
        {
          "name": "engine-location",
          "source": "/document/engine-location"
        },
        {
          "name": "wheel-base",
          "source": "/document/wheel-base"
        },
        {
          "name": "length",
          "source": "/document/length"
        },
        {
          "name": "width",
          "source": "/document/width"
        },
        {
          "name": "height",
          "source": "/document/height"
        },
        {
          "name": "curb-weight",
          "source": "/document/curb-weight"
        },
        {
          "name": "engine-type",
          "source": "/document/engine-type"
        },
        {
          "name": "num-of-cylinders",
          "source": "/document/num-of-cylinders"
        },
        {
          "name": "engine-size",
          "source": "/document/engine-size"
        },
        {
          "name": "fuel-system",
          "source": "/document/fuel-system"
        },
        {
          "name": "bore",
          "source": "/document/bore"
        },
        {
          "name": "stroke",
          "source": "/document/stroke"
        },
        {
          "name": "compression-ratio",
          "source": "/document/compression-ratio"
        },
        {
          "name": "horsepower",
          "source": "/document/horsepower"
        },
        {
          "name": "peak-rpm",
          "source": "/document/peak-rpm"
        },
        {
          "name": "city-mpg",
          "source": "/document/city-mpg"
        },
        {
          "name": "highway-mpg",
          "source": "/document/highway-mpg"
        },
        {
          "name": "price",
          "source": "/document/price"
        }
      ],
      "outputs": [
        {
          "name": "predicted_price",
          "targetName": "predicted_price"
        }
      ]
    }

Dizin oluşturucu çıkış alanı eşlemelerini güncelleştirme

Dizin oluşturucu çıkış alanı eşlemeleri, dizine hangi zenginleştirmelerin kaydedileceğini belirler. Dizin oluşturucunun çıkış alanı eşlemeleri bölümünü aşağıdaki kod parçacığıyla değiştirin:

"outputFieldMappings": [
    {
      "sourceFieldName": "/document/predicted_price",
      "targetFieldName": "predicted_price"
    }
  ]

Artık dizin oluşturucunuzu çalıştırabilir ve özelliğin predicted_price dizinde AML beceri çıkışınızın sonucuyla doldurulduğunu doğrulayabilirsiniz.