Ripetere il training e distribuire un modello di Machine Learning
SI APPLICA A: Machine Learning Studio (versione classica) di Azure Machine Learning
Importante
Il supporto dello studio di Azure Machine Learning (versione classica) terminerà il 31 agosto 2024. È consigliabile passare ad Azure Machine Learning entro tale data.
A partire dal 1° dicembre 2021 non sarà possibile creare nuove risorse dello studio di Azure Machine Learning (versione classica). Fino al 31 agosto 2024 sarà possibile continuare a usare le risorse dello studio di Azure Machine Learning (versione classica).
- Vedere le informazioni sullo spostamento di progetti di apprendimento automatico da ML Studio (versione classica) ad Azure Machine Learning.
- Scoprire di più su Azure Machine Learning
La documentazione relativa allo studio di Machine Learning (versione classica) è in fase di ritiro e potrebbe non essere aggiornata in futuro.
La ripetizione del training è un modo per garantire che i modelli di Machine Learning rimangano accurati e si basino sui dati più rilevanti disponibili. Questo articolo illustra come ripetere il training e distribuire un modello di Machine Learning come nuovo servizio Web in Studio (versione classica). Se si sta cercando di ripetere il training di un servizio Web classico, vedere questo articolo delle procedure.
Questo articolo presuppone che si disponga già di un servizio Web predittivo distribuito. Se non si ha già un servizio Web predittivo, vedere come distribuire un servizio Web studio (versione classica).
È possibile seguire questa procedura per ripetere il training e distribuire un nuovo servizio Web di Machine Learning:
- Distribuire un servizio Web di ripetizione del training
- Eseguire il training di un nuovo modello usando il servizio Web di ripetizione del training
- Aggiornare l'esperimento predittivo esistente per usare il nuovo modello
Nota
È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.
Distribuire la ripetizione del training del servizio Web
Un servizio Web di ripetizione del training consente di ripetere il training del modello con un nuovo set di parametri, come nuovi dati, e salvarlo per usarlo in seguito. Quando si connette un output del servizio Web a un modello di training, l'esperimento di training restituisce un nuovo modello da usare.
Usare la procedura seguente per distribuire un servizio Web di ripetizione del training:
Connettere un modulo Web Service Input (Input servizio Web) all'input di dati. In genere, infatti, si vuole che i dati di input vengano elaborati allo stesso modo dei dati di training originali.
Connettere un modulo Web Service Output (Output servizio Web) all'output del modello di training.
Se si dispone di un modulo Evaluate Model (Modello di valutazione), è possibile connettere un modulo Web Service Output (Output servizio Web) per ottenere come output i risultati della valutazione.
Eseguire l'esperimento.
Dopo aver eseguito l'esperimento, il flusso di lavoro risultante dovrebbe essere simile a quello dell'immagine seguente:
Ora è possibile distribuire l'esperimento di training come un servizio Web di ripetizione del training che ottiene come output un modello sottoposto a training e i risultati di valutazione del modello.
Fare clic su Set Up Web Service(Configura servizio Web) nella parte inferiore dell'area di disegno dell'esperimento.
Selezionare Deploy Web Service [New] (Distribuisci servizio Web [Nuovo]). Viene aperto il portale dei servizi Web di Machine Learning nella pagina Deploy Web Service (Distribuisci servizio Web).
Digitare un nome per il servizio Web e scegliere un piano di pagamento.
Seleziona Distribuisci.
Ripetere il training del modello
In questo esempio si userà il linguaggio C# per creare l'applicazione di ripetizione del training. Per eseguire questa attività, tuttavia, è possibile usare anche il codice di esempio Python o R.
Usare la procedura seguente per chiamare le API per la ripetizione del training:
- Creare un'applicazione console C# in Visual Studio. A tale scopo, selezionare Nuovo>Progetto>Visual C#>Desktop classico di Windows>Applicazione console (.NET Framework).
- Accedere al portale dei servizi Web Machine Learning.
- Fare clic sul servizio Web usato.
- Fare clic su Consume(Uso).
- Nella sezione Sample Code (Codice di esempio) nella parte inferiore della pagina Consume (Uso) fare clic su Batch.
- Copiare il codice C# di esempio per l'esecuzione batch e incollarlo nel file Program.cs, verificando che lo spazio dei nomi rimanga invariato.
Aggiungere il pacchetto NuGet Microsoft.AspNet.WebApi.Client come specificato nei commenti. Per aggiungere il riferimento a Microsoft.WindowsAzure.Storage.dll, è possibile che sia necessario installare la libreria client per i servizi di Archiviazione di Azure.
Lo screenshot seguente mostra la pagina Utilizzo nel portale dei servizi Web di Machine Learning.
Aggiornare la dichiarazione apikey
Individuare la dichiarazione apikey:
const string apiKey = "abc123"; // Replace this with the API key for the web service
Nella sezione Basic consumption info (Informazioni di base sul consumo) della pagina Consume (Uso) individuare la chiave primaria e copiarla nella dichiarazione apikey.
Aggiornare le informazioni di archiviazione di Azure
Il codice di esempio BES carica un file da un'unità locale (ad esempio, "C:\temp\CensusInput.csv") in Archiviazione di Azure, lo elabora e scrive i risultati in Archiviazione di Azure.
- Accedere al portale di Azure
- Nella colonna a sinistra fare clic su Altri servizi e usare Account di archiviazione per cercare e selezionare un account.
- Nell'elenco degli account di archiviazione selezionarne uno per l'archiviazione del modello per il quale è stato ripetuto il training.
- Nella colonna di spostamento a sinistra fare clic su Chiavi di accesso.
- Copiare e salvare la chiave di accesso primaria.
- Nella colonna di spostamento a sinistra fare clic su BLOB.
- Selezionare un contenitore esistente oppure crearne uno nuovo e salvare il nome.
Individuare le dichiarazioni StorageAccountName, StorageAccountKey e StorageContainerName e aggiornare i valori salvati dal portale.
const string StorageAccountName = "mystorageacct"; // Replace this with your Azure storage account name
const string StorageAccountKey = "a_storage_account_key"; // Replace this with your Azure Storage key
const string StorageContainerName = "mycontainer"; // Replace this with your Azure Storage container name
È necessario anche assicurarsi che il file di input sia disponibile nella posizione specificata nel codice.
Specificare il percorso di output
Quando si specifica il percorso di output nel payload della richiesta, l'estensione del file specificata in RelativeLocation deve essere indicata come ilearner
.
Outputs = new Dictionary<string, AzureBlobDataReference>() {
{
"output1",
new AzureBlobDataReference()
{
ConnectionString = storageConnectionString,
RelativeLocation = string.Format("{0}/output1results.ilearner", StorageContainerName) /*Replace this with the location you want to use for your output file and a valid file extension (usually .csv for scoring results or .ilearner for trained models)*/
}
},
Di seguito è riportato un esempio di output della ripetizione del training:
Valutare i risultati della ripetizione del training
Quando si esegue l'applicazione, l'output include l'URL e il token di firma di accesso condiviso necessari per accedere ai risultati della valutazione.
È possibile visualizzare i risultati delle prestazioni del modello sottoposto nuovamente a training combinando BaseLocation, RelativeLocation e SasBlobToken dai risultati di output per output2 e incollando l'URL completo nella barra degli indirizzi del browser.
Esaminare i risultati per determinare se le prestazioni del modello appena sottoposto a training sono migliori di quello esistente.
Salvare BaseLocation, RelativeLocation e SasBlobToken dai risultati di output.
Aggiornare l'esperimento predittivo
Accedere a Azure Resource Manager
Per prima cosa, accedere all'account Azure dall'interno dell'ambiente PowerShell usando il cmdlet Connect-AzAccount .
Ottenere l'oggetto definizione del servizio Web
Ottenere quindi l'oggetto Definizione servizio Web chiamando il cmdlet Get-AzMlWebService .
$wsd = Get-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'
Per determinare il nome del gruppo di risorse di un servizio Web esistente, eseguire il cmdlet Get-AzMlWebService senza parametri per visualizzare i servizi Web nella sottoscrizione. Individuare il servizio Web e quindi osservare l'ID del servizio Web. Il nome del gruppo di risorse è il quarto elemento dell'ID, subito dopo l'elemento resourceGroups . Nell'esempio seguente, il nome del gruppo di risorse è Default-MachineLearning-SouthCentralUS.
Properties : Microsoft.Azure.Management.MachineLearning.WebServices.Models.WebServicePropertiesForGraph
Id : /subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237
Name : RetrainSamplePre.2016.8.17.0.3.51.237
Location : South Central US
Type : Microsoft.MachineLearning/webServices
Tags : {}
In alternativa, per determinare il nome del gruppo di risorse di un servizio Web esistente, accedere al portale dei servizi Web di Machine Learning. Selezionare il servizio Web. Il nome del gruppo di risorse è il quinto elemento dell'URL del servizio Web, subito dopo l'elemento resourceGroups . Nell'esempio seguente, il nome del gruppo di risorse è Default-MachineLearning-SouthCentralUS.
https://services.azureml.net/subscriptions/<subscription ID>/resourceGroups/Default-MachineLearning-SouthCentralUS/providers/Microsoft.MachineLearning/webServices/RetrainSamplePre.2016.8.17.0.3.51.237
Esportare l'oggetto definizione del servizio Web in un file in formato JSON
Per modificare la definizione del modello sottoposto a training per usare il modello appena sottoposto a training, è prima necessario usare il cmdlet Export-AzMlWebService per esportarlo in un file in formato JSON.
Export-AzMlWebService -WebService $wsd -OutputFile "C:\temp\mlservice_export.json"
Aggiornare il riferimento al BLOB ilearner
Negli asset individuare il [modello con training] e aggiornare il valore uri nel nodo locationInfo con l'URI del BLOB ilearner. L'URI viene generato combinando i valori di BaseLocation e RelativeLocation dell'output della chiamata di ripetizione del training del servizio Esecuzione batch.
"asset3": {
"name": "Retrain Sample [trained model]",
"type": "Resource",
"locationInfo": {
"uri": "https://mltestaccount.blob.core.windows.net/azuremlassetscontainer/baca7bca650f46218633552c0bcbba0e.ilearner"
},
"outputPorts": {
"Results dataset": {
"type": "Dataset"
}
}
},
Importare il file JSON in un oggetto definizione del servizio Web
Usare il cmdlet Import-AzMlWebService per convertire nuovamente il file JSON modificato in un oggetto Definizione servizio Web che è possibile usare per aggiornare l'esperimento predicativo.
$wsd = Import-AzMlWebService -InputFile "C:\temp\mlservice_export.json"
Aggiornare il servizio Web
Usare infine il cmdlet Update-AzMlWebService per aggiornare l'esperimento predittivo.
Update-AzMlWebService -Name 'RetrainSamplePre.2016.8.17.0.3.51.237' -ResourceGroupName 'Default-MachineLearning-SouthCentralUS'
Passaggi successivi
Per altre informazioni su come gestire i servizi Web o tenere traccia di più esecuzioni degli esperimenti, vedere gli articoli seguenti: