Példa: Egyéni képesség létrehozása és üzembe helyezése az Azure Machine Learning Designerrel (archiválva)

Ez a példa archiválva van, és nem támogatott. Elmagyarázta, hogyan használható az Azure Machine Learning Designer egy könnyen használható interaktív vászon, amellyel gépi tanulási modelleket hozhat létre olyan feladatokhoz, mint a regresszió és a besorolás. A tervező által egy Cognitive Search-bővítési folyamatban létrehozott modell meghívásához további lépésekre van szükség. Ebben a példában egy egyszerű regressziós modellt fog létrehozni, amely előrejelzi az autó árát, és AML-képességként meghívja a következtetési végpontot.

Kövesse a Regresszió – Automobile Price Prediction (Advanced) oktatóanyagot a példák folyamatainak és adatkészleteinek dokumentációs oldalán egy olyan modell létrehozásához, amely előrejelzi az autó árát a különböző funkciók alapján.

Fontos

A modell valós idejű következtetési folyamatot követő üzembe helyezése érvényes végpontot eredményez, de a Cognitive Search AML-képességével nem használható.

Modell regisztrálása és eszközök letöltése

Miután betanított egy modellt, regisztrálja a betanított modellt , és a lépéseket követve töltse le a trained_model_outputs mappában lévő összes fájlt, vagy töltse le csak a score.pyconda_env.yml modellek összetevőlapjáról származó fájlokat. A pontozási szkriptet a modell valós idejű következtetési végpontként való üzembe helyezése előtt fogja szerkeszteni.

A Cognitive Search bővítési folyamatai egyetlen dokumentumon működnek, és létrehoznak egy kérést, amely egyetlen előrejelzés bemeneteit tartalmazza. A letöltött score.py elfogadja a rekordok listáját, és szerializált JSON-sztringként adja vissza az előrejelzések listáját. Két módosítást fog végrehajtani a score.py

  • Szerkessze a szkriptet úgy, hogy egyetlen bemeneti rekorddal működjön, nem listával
  • Szerkessze a szkriptet egy JSON-objektum visszaadásához egyetlen tulajdonsággal, az előrejelzett ármal.

Nyissa meg a letöltött score.py, és szerkessze a run(data) függvényt. A függvény jelenleg a következő bemenetre számít a modell _samples.json fájljában leírtak szerint.

[
  {
    "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
  }
]

A módosítások biztosítják, hogy a modell elfogadja a Cognitive Search által az indexelés során létrehozott bemenetet, amely egyetlen rekord.

{
    "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
}

Cserélje ki a 27–30. sorokat a


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

Emellett szerkesztenie kell a szkript által egy sztringből egy JSON-objektumba létrehozott kimenetet is. Szerkessze a visszatérési utasítást (37. sor) az eredeti fájlban a következőre:

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

Itt látható a frissített run függvény a bemeneti formátum változásaival és az előrejelzett kimenettel, amely egyetlen rekordot fogad bemenetként, és egy JSON-objektumot ad vissza az előre jelzett áron.

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]
    }

A modell regisztrálása és üzembe helyezése

A módosítások mentésével mostantól regisztrálhatja a modellt a portálon. Válassza ki a regisztrációs modellt, és adjon meg egy érvényes nevet. Válassza a Other lehetőséget a Modellkeretrendszerhez, a Custom lehetőséget a Keretrendszer nevéhez, és a 1.0 lehetőséget a Keretrendszer verziójához. Válassza a Upload folder lehetőséget, és válassza ki a frissített score.py és conda_env.yamlmappát.

Válassza ki a modellt, és válassza ki a Deploy műveletet. Az üzembe helyezési lépés feltételezi, hogy rendelkezésre áll egy AKS-következtetési fürt. A tárolópéldányokat jelenleg nem támogatja a Cognitive Search szolgáltatás.

  1. Adjon meg érvényes végpontnevet
  2. Válassza ki a Azure Kubernetes Service számítási típusát
  3. Válassza ki a következtetési fürt számítási nevét
  4. Kapcsolja be a enable authentication-t
  5. Válassza ki a Key-based authentication típust
  6. Válassza ki a frissített score.py a entry script file számára.
  7. Válassza ki a conda_env.yamlconda dependencies file számára
  8. Válassza az üzembe helyezés gombot az új végpont üzembe helyezéséhez.

Az újonnan létrehozott végpont integrálása a Cognitive Search szolgáltatással

  1. Egyetlen autórekordot tartalmazó JSON-fájl hozzáadása blobtárolóhoz
  2. Konfiguráljon egy AI-bővítési folyamatot az Adatok importálása varázslóval. Győződjön meg róla, hogy JSON van kiválasztva parsing mode-ként.
  3. A Add Enrichments lapon jelöljön ki egyetlen készséget Extract people names helyőrzőnek.
  4. Adjon hozzá egy új mezőt a predicted_pricetípusú Edm.Double nevű indexhez, állítsa a Beolvasható tulajdonság értékét igaz értékre.
  5. Az adatimportálási folyamat befejezése

Az AML-képesség hozzáadása a készségkészlethez

A készségkészletek listájában válassza ki a létrehozott készségkészletet. Most szerkessze a készségkészletet, hogy lecserélje a személyazonosítási készséget az AML-képességre az árak előrejelzéséhez. A Skillset Definition (JSON) lapon válassza ki a Azure Machine Learning (AML) a készségek legördülő listából. Válassza ki a munkaterületet, hogy az AML-képesség felderítse a végpontot, a munkaterületnek és a keresési szolgáltatásnak ugyanabban az Azure-előfizetésben kell lennie. Válassza ki az oktatóanyagban korábban létrehozott végpontot. Ellenőrizze, hogy a képesség ki van-e töltve a végpont üzembe helyezésekor konfigurált URI- és hitelesítési adatokkal. Másolja ki a képességsablont, és cserélje le a képességcsoportban lévő képességet. Szerkeszd a képességet erre:

  1. Állítsa be a nevet érvényesre.
  2. Leírás hozzáadása
  3. Állítsa a degreesOfParallelism értékét 1-re
  4. A kontextus beállítása /document
  5. Állítsa be a bemeneteket az összes szükséges bemenetre, lásd az alábbi minta készségdefiníciót
  6. Állítsa be a kimeneteket a visszaadott előrejelzett ár rögzítéséhez.
{
      "@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"
        }
      ]
    }

Az indexelő kimeneti mezőleképezéseinek frissítése

Az indexelő kimeneti mezőleképezései határozzák meg, hogy a rendszer milyen gazdagításokat ment az indexbe. Cserélje le az indexelő kimeneti mezőleképezések szakaszát az alábbi kódrészletre:

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

Most már futtathatja az indexelőt, és ellenőrizheti, hogy a predicted_price tulajdonság az AML-képesség kimenetéből származó eredménnyel van-e feltöltve az indexben.