Události
Vytváření inteligentních aplikací
17. 3. 23 - 21. 3. 23
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Zjistěte, jak nasadit předem natrénovaný model ML.NET strojového učení pro predikce přes PROTOKOL HTTP prostřednictvím bezserverového prostředí Azure Functions.
Tato ukázka je aplikace Azure Functions triggeru HTTP jazyka C#, která používá předtrénovaný binární klasifikační model k kategorizaci mínění textu jako kladné nebo záporné. Azure Functions poskytuje snadný způsob, jak spustit malé části kódu ve velkém měřítku ve spravovaném bezserverovém prostředí v cloudu. Kód pro tuto ukázku najdete v úložišti dotnet/machinelearning-samples na GitHubu.
V sadě Visual Studio 2022 otevřete dialogové okno Vytvořit nový projekt .
V dialogovém okně Vytvořit nový projekt vyberte šablonu projektu Azure Functions .
Do textového pole Název
V dialogovém okně Další informace ponechte všechna výchozí nastavení a vyberte Vytvořit.
Instalace balíčku NuGet Microsoft.ML
Stejným postupem nainstalujte balíčky NuGet Microsoft.Extensions.ML, Microsoft.Extensions.DependencyInjection a Microsoft.Azure.Functions.Extensions .
Vytvořte třídu pro předpověď mínění. Přidejte do projektu novou třídu:
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt a pak vyberte >novou funkci Azure Functions.
V dialogovém okně Přidat novou položku vyberte Funkci Azure a změňte pole Název na AnalyzeSentiment.cs. Pak vyberte Přidat.
V dialogovém okně Nová funkce Azure Functions vyberte Trigger HTTP a v rozevíracím seznamu Úroveň autorizace zvolte Anonymní . Pak vyberte OK.
Soubor AnalyzeSentiment.cs se otevře v editoru kódu. Na začátek AnalyzeSentiment.cs přidejte následující using
direktivu:
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Extensions.ML;
using SentimentAnalysisFunctionsApp.DataModels;
Ve výchozím nastavení AnalyzeSentiment
je static
třída . Nezapomeňte odebrat static
klíčové slovo z definice třídy.
public class AnalyzeSentiment
{
}
Potřebujete vytvořit některé třídy pro vstupní data a předpovědi. Přidejte do projektu novou třídu:
Vytvořte v projektu adresář s názvem DataModels pro uložení datových modelů: V Průzkumník řešení klikněte pravým tlačítkem na projekt a vyberte Přidat > novou složku. Zadejte DataModels a vyberte Enter.
V Průzkumník řešení klikněte pravým tlačítkem myši na adresář DataModels a pak vyberte Přidat > třídu.
V dialogovém okně Přidat novou položku vyberte Třídu a změňte pole Název na SentimentData.cs. Pak vyberte Přidat.
Soubor SentimentData.cs se otevře v editoru kódu. Na začátek SentimentData.cs přidejte následující using
direktivu:
using Microsoft.ML.Data;
Odeberte existující definici třídy a do souboru SentimentData.cs přidejte následující kód:
public class SentimentData
{
[LoadColumn(0)]
public string SentimentText;
[LoadColumn(1)]
[ColumnName("Label")]
public bool Sentiment;
}
V Průzkumník řešení klikněte pravým tlačítkem myši na adresář DataModels a pak vyberte Přidat > třídu.
V dialogovém okně Přidat novou položku vyberte Třídu a změňte pole Název na SentimentPrediction.cs. Pak vyberte Přidat. Soubor SentimentPrediction.cs se otevře v editoru kódu. Na začátek SentimentPrediction.cs přidejte následující using
direktivu:
using Microsoft.ML.Data;
Odeberte existující definici třídy a do souboru SentimentPrediction.cs přidejte následující kód:
public class SentimentPrediction : SentimentData
{
[ColumnName("PredictedLabel")]
public bool Prediction { get; set; }
public float Probability { get; set; }
public float Score { get; set; }
}
SentimentPrediction
dědí z toho, ze SentimentData
kterého poskytuje přístup k původním datům ve SentimentText
vlastnosti a výstup vygenerovaný modelem.
Pokud chcete vytvořit jednu předpověď, musíte vytvořit .PredictionEngine
PredictionEngine
není bezpečný pro přístup z více vláken. Kromě toho musíte vytvořit instanci všude, kde je potřeba v aplikaci. S rostoucím růstem aplikace se tento proces může stát nespravovatelným. Pro zvýšení výkonu a bezpečnosti vláken použijte kombinaci injektáže závislostí a PredictionEnginePool
služby, která vytvoří ObjectPool
PredictionEngine
objekty pro použití v celé aplikaci.
Následující odkaz obsahuje další informace, pokud chcete získat další informace o injektáži závislostí.
V Průzkumník řešení klikněte pravým tlačítkem myši na projekt a pak vyberte >.
V dialogovém okně Přidat novou položku vyberte Třída a změňte pole Název na Startup.cs. Pak vyberte Přidat.
Na začátek Startup.cs using
přidejte následující direktivy:
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.ML;
using SentimentAnalysisFunctionsApp;
using SentimentAnalysisFunctionsApp.DataModels;
using System.IO;
using System;
Odeberte existující kód pod direktivy using
a přidejte následující kód:
[assembly: FunctionsStartup(typeof(Startup))]
namespace SentimentAnalysisFunctionsApp
{
public class Startup : FunctionsStartup
{
}
}
Definujte proměnné pro uložení prostředí, ve kterém je aplikace spuštěná, a cestu k souboru, ve které se model nachází uvnitř Startup
třídy.
private readonly string _environment;
private readonly string _modelPath;
Pod tím vytvořte konstruktor pro nastavení hodnot _environment
a _modelPath
proměnných. Když je aplikace spuštěná místně, výchozí prostředí je Vývoj.
public Startup()
{
_environment = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT");
if (_environment == "Development")
{
_modelPath = Path.Combine("MLModels", "sentiment_model.zip");
}
else
{
string deploymentPath = @"D:\home\site\wwwroot\";
_modelPath = Path.Combine(deploymentPath, "MLModels", "sentiment_model.zip");
}
}
Pak přidejte novou metodu volanou Configure
pro registraci PredictionEnginePool
služby pod konstruktor.
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddPredictionEnginePool<SentimentData, SentimentPrediction>()
.FromFile(modelName: "SentimentAnalysisModel", filePath: _modelPath, watchForChanges: true);
}
Na vysoké úrovni tento kód inicializuje objekty a služby automaticky pro pozdější použití v případě, že aplikace vyžaduje, aby ho nemusel ručně provádět.
Modely strojového učení nejsou statické. Jakmile budou k dispozici nová trénovací data, model se znovu natrénuje a znovu nasadí. Jedním ze způsobů, jak do aplikace získat nejnovější verzi modelu, je restartování nebo opětovné nasazení aplikace. To ale představuje výpadek aplikace. Služba PredictionEnginePool
poskytuje mechanismus opětovného načtení aktualizovaného modelu bez restartování nebo opětovného nasazení aplikace.
watchForChanges
Nastavte parametr na true
a PredictionEnginePool
spustí, FileSystemWatcher
který naslouchá oznámením o změnách systému souborů a vyvolává události, když dojde ke změně souboru. Tím se zobrazí výzva k automatickému opětovnému PredictionEnginePool
načtení modelu.
Model je identifikován parametrem modelName
, aby při změně bylo možné znovu načíst více než jeden model na aplikaci.
Tip
Alternativně můžete metodu FromUri
použít při práci s modely uloženými vzdáleně. Místo sledování událostí FromUri
změněných souborů se dotazuje vzdálené umístění na změny. Interval dotazování je ve výchozím nastavení 5 minut. Interval dotazování můžete zvýšit nebo snížit na základě požadavků vaší aplikace. V ukázce kódu níže dotazuje PredictionEnginePool
model uložený na zadaném identifikátoru URI každou minutu.
builder.Services.AddPredictionEnginePool<SentimentData, SentimentPrediction>()
.FromUri(
modelName: "SentimentAnalysisModel",
uri:"https://github.com/dotnet/samples/raw/main/machine-learning/models/sentimentanalysis/sentiment_model.zip",
period: TimeSpan.FromMinutes(1));
Do třídy AnalyzeSentiment vložte následující kód:
public AnalyzeSentiment(PredictionEnginePool<SentimentData, SentimentPrediction> predictionEnginePool)
{
_predictionEnginePool = predictionEnginePool;
}
Tento kód přiřadí PredictionEnginePool
ho předáním konstruktoru funkce, který získáte prostřednictvím injektáže závislostí.
Nahraďte existující implementaci metody Run ve třídě AnalyzeSentiment následujícím kódem:
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
// Parse HTTP Request Body
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
SentimentData data = JsonConvert.DeserializeObject<SentimentData>(requestBody);
//Make Prediction
SentimentPrediction prediction = _predictionEnginePool.Predict(modelName: "SentimentAnalysisModel", example: data);
//Convert prediction to string
string sentiment = Convert.ToBoolean(prediction.Prediction) ? "Positive" : "Negative";
//Return Prediction
return new OkObjectResult(sentiment);
}
Run
Při spuštění metody jsou příchozí data z požadavku HTTP deserializována a použita jako vstup pro PredictionEnginePool
. Metoda Predict
je pak volána k provedení predikcí pomocí SentimentAnalysisModel
registrované ve Startup
třídě a vrátí výsledky zpět uživateli v případě úspěchu.
Teď, když je všechno nastavené, je čas aplikaci otestovat:
Spuštění aplikace
Otevřete PowerShell a zadejte kód do výzvy, kde port je port, na kterém je spuštěná vaše aplikace. Obvykle je port 7071.
Invoke-RestMethod "http://localhost:<PORT>/api/AnalyzeSentiment" -Method Post -Body (@{SentimentText="This is a very bad steak"} | ConvertTo-Json) -ContentType "application/json"
Pokud je výstup úspěšný, měl by vypadat podobně jako v následujícím textu:
Negative
Gratulujeme! Úspěšně jste model obsloužili, abyste pomocí funkce Azure Functions vytvořili předpovědi přes internet.
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Události
Vytváření inteligentních aplikací
17. 3. 23 - 21. 3. 23
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení
Modul
Publikování rozhraní API do Azure Static Web Apps - Training
Publikování aplikace a rozhraní API JavaScriptu angular, React, Svelte nebo Vue pomocí Azure Static Web Apps a Azure Functions Nasaďte svůj kód z GitHubu na přípravný web pomocí náhledových URL.
Certifikace
Microsoft Certified: Azure Data Scientist Associate (certifikace) - Certifications
Správa příjmu a přípravy dat, trénování a nasazení modelů a monitorování řešení strojového učení pomocí Pythonu, Azure Machine Learning a MLflow