Příklad: Sestavení a nasazení vlastní dovednosti pomocí návrháře služby Azure Machine Learning (archivováno)
Tento příklad je archivován a není podporován. Vysvětluje, jak používat návrháře služby Azure Machine Learning , který je snadno použitelným interaktivním plátnem k vytváření modelů strojového učení pro úlohy, jako je regrese a klasifikace. Vyvolání modelu vytvořeného návrhářem v kanálu rozšiřování kognitivního vyhledávání vyžaduje několik dalších kroků. V tomto příkladu vytvoříte jednoduchý regresní model, který předpovídá cenu automobilu a vyvolá koncový bod odvozování jako dovednost AML.
Postupujte podle kurzu Regrese - Automobile Price Prediction (Advanced) kurzu v příklady kanálů & datových sadách dokumentaci a vytvořte model, který predikuje cenu automobilu vzhledem k různým funkcím.
Důležitý
Nasazení modelu po procesu odvozování v reálném čase způsobí platný koncový bod, ale ne ten, který můžete použít s dovedností AML ve službě Cognitive Search.
Registrace modelu a stažení aktiv
Jakmile máte natrénovaný model, zaregistrujte natrénovaný model a postupujte podle pokynů ke stažení všech souborů ve složce trained_model_outputs
nebo stažení pouze score.py
a conda_env.yml
souborů ze stránky artefaktů modelů. Před nasazením modelu jako koncového bodu pro odvozování v reálném čase upravíte bodovací skript.
Úprava hodnoticího skriptu pro použití se službou Cognitive Search
Kanály rozšiřování kognitivního vyhledávání fungují na jednom dokumentu a generují požadavek, který obsahuje vstupy pro jednu předpověď. Stažený score.py
přijme seznam záznamů a vrátí seznam předpovědí jako serializovaný řetězec JSON. V score.py
provedete dvě změny.
- Upravte skript tak, aby fungoval s jedním vstupním záznamem, ne se seznamem.
- Upravte skript tak, aby vrátil objekt JSON s jednou vlastností, předpovězenou cenou.
Otevřete stažený score.py
a upravte funkci run(data)
. Funkce je nyní nastavena tak, aby očekávala následující vstup, jak je popsáno v souboru _samples.json
modelu.
[
{
"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
}
]
Vaše změny zajistí, že model může přijmout vstup vygenerovaný službou Cognitive Search během indexování, což je jeden záznam.
{
"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
}
Nahrazení řádků 27 až 30
for key, val in data.items():
input_entry[key].append(decode_nan(val))
Budete také muset upravit výstup, který skript vygeneruje z řetězce do objektu JSON. Upravte návratový příkaz (řádek 37) v původním souboru tak, aby:
output = result.data_frame.values.tolist()
return {
"predicted_price": output[0][-1]
}
Tady je aktualizovaná funkce run
se změnami ve vstupním formátu a predikovaným výstupem, který přijme jeden záznam jako vstup a vrátí objekt JSON s předpokládanou cenou.
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]
}
Registrace a nasazení modelu
S uloženými změnami teď můžete model zaregistrovat na portálu. Vyberte model registrace a zadejte mu správný název. Zvolte Other
pro Model Framework, Custom
pro název architektury a 1.0
pro verzi frameworku. Vyberte možnost Upload folder
a vyberte složku s aktualizovanými score.py
a conda_env.yaml
.
Vyberte model a aktivujte akci Deploy
. Krok nasazení předpokládá, že máte zřízený inference cluster AKS. Instance kontejnerů se v současné době ve službě Cognitive Search nepodporují.
- Zadejte platný název koncového bodu.
- Vyberte typ výpočtu
Azure Kubernetes Service
- Vyberte název výpočetního objektu pro cluster odvozování.
- Přepněte
enable authentication
na zapnuto - Výběr
Key-based authentication
pro typ - Výběr aktualizovaného
score.py
proentry script file
- Vyberte
conda_env.yaml
proconda dependencies file
- Výběrem tlačítka Nasadit nasaďte nový koncový bod.
Integrace s Kognitivním vyhledáváním
Integrace nově vytvořeného koncového bodu se službou Cognitive Search
- Přidání souboru JSON obsahujícího jeden záznam automobilu do kontejneru objektů blob
- Nakonfigurujte kanál rozšiřování AI pomocí průvodce importem dat. Nezapomeňte vybrat
JSON
jakoparsing mode
. - Na kartě
Add Enrichments
vyberte jednu dovednostExtract people names
jako zástupný symbol. - Přidejte nové pole do indexu s názvem
predicted_price
typuEdm.Double
, nastavte Vlastnost Retrievable na true. - Dokončení procesu importu dat
Přidání dovednosti AML do sady dovedností
V seznamu sad dovedností vyberte sadu dovedností, kterou jste vytvořili. Sadu dovedností teď upravíte tak, aby nahradila identifikační dovednosti lidí dovednostmi AML, abyste mohli předpovídat ceny.
Na kartě Definice sady dovedností (JSON) vyberte v rozevíracím seznamu dovedností Azure Machine Learning (AML)
. Vyberte pracovní prostor, aby dovednost AML objevila váš koncový bod, pracovní prostor a vyhledávací služba musí být ve stejném předplatném Azure.
Vyberte koncový bod, který jste vytvořili dříve v kurzu.
Ověřte, že se dovednost naplní identifikátorem URI a ověřovacími informacemi, jak je nakonfigurované při nasazení koncového bodu. Zkopírujte šablonu dovedností a nahraďte dovednost v sadě dovedností.
Upravte dovednosti tak, aby:
- Nastavení názvu na platný název
- Přidání popisu
- Nastavte stupně paralelismu na 1
- Nastavení kontextu na
/document
- Nastavte vstupy na všechny požadované vstupy, viz definice ukázkové dovednosti níže.
- Nastavte výstupy tak, aby zachytily vrácenou předpokládanou cenu.
{
"@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"
}
]
}
Aktualizace mapování výstupních polí indexeru
Mapování výstupních polí indexeru určuje, jaká obohacení se uloží do indexu. Část mapování výstupních polí indexeru nahraďte následujícím fragmentem kódu:
"outputFieldMappings": [
{
"sourceFieldName": "/document/predicted_price",
"targetFieldName": "predicted_price"
}
]
Teď můžete spustit indexer a ověřit, že je vlastnost predicted_price
naplněna v indexu s výsledkem výstupu dovednosti AML.