Vai al contenuto

Utilizzare Phi-3 e C# con ONNX per esempi di testo e visione

Scopri come utilizzare i modelli di linguaggio Phi-3 con C# e ONNX per analisi di testo e immagini.

Negli ultimi tempi, l’uso di modelli di linguaggio di grandi dimensioni (LLM) ha guadagnato notevole attenzione. Tuttavia, i modelli di linguaggio di piccole dimensioni (SLM) come Phi-3 stanno emergendo come alternative potenti e più efficienti. In questo articolo, esploreremo come utilizzare Phi-3 con C# e ONNX per applicazioni di testo e visione.

Introduzione al modello di linguaggio Phi-3

Il modello di linguaggio Phi-3, sviluppato da Microsoft, rappresenta un significativo avanzamento nell’intelligenza artificiale. Parte della famiglia Phi-3, questi modelli sono ottimizzati per l’uso con ONNX Runtime, garantendo alta compatibilità e prestazioni elevate. I modelli Phi-3, tra cui Phi-3-mini, Phi-3-small e Phi-3-medium, sono progettati per essere istruiti e ottimizzati per vari compiti come linguaggio, ragionamento, codifica e matematica.

Introduzione a ONNX

ONNX (Open Neural Network Exchange) è un formato open-source che consente ai modelli di intelligenza artificiale di essere portabili e interoperabili tra diversi framework e hardware. ONNX supporta una vasta gamma di operatori e offre estensibilità, rendendolo una pietra miliare per lo sviluppo dell’IA.

Perché utilizzare ONNX nello sviluppo di IA locale

Lo sviluppo di IA locale trae notevoli benefici dall’uso di ONNX grazie alla sua capacità di semplificare il deployment dei modelli e migliorare le prestazioni. ONNX fornisce un formato comune per i modelli di machine learning, facilitando lo scambio tra diversi framework e ottimizzando per vari ambienti hardware. Per gli sviluppatori C#, questo è particolarmente utile grazie a librerie specifiche come Microsoft.ML.OnnxRuntime.

Utilizzo di Phi-3 e Phi-3 Vision con C# e ONNX

Il repository Phi-3 Cookbook su GitHub contiene esempi di laboratori e workshop che dimostrano l’uso dei modelli Phi-3 mini e Phi-3 Vision in applicazioni .NET. Questi esempi mostrano come utilizzare questi potenti modelli per compiti come il question-answering e l’analisi delle immagini all’interno di un ambiente .NET.

Applicazione Console di esempio per utilizzare un modello ONNX

Di seguito è riportato un esempio di applicazione console che utilizza un modello ONNX. I passaggi principali per utilizzare un modello con ONNX sono:

  • Il modello Phi-3, memorizzato nel modelPath, viene caricato in un oggetto Model.
  • Questo modello viene quindi utilizzato per creare un Tokenizer responsabile della conversione degli input di testo in un formato comprensibile dal modello.

Il chatbot opera in un ciclo continuo, aspettando l’input dell’utente. Quando un utente digita una domanda, questa viene combinata con un prompt di sistema per formare un prompt completo. Il prompt completo viene quindi tokenizzato e passato a un oggetto Generator. Il generatore, configurato con parametri specifici, genera una risposta un token alla volta. Ogni token viene decodificato in testo e stampato sulla console, formando la risposta del chatbot. Il ciclo continua fino a quando l’utente decide di uscire inserendo una stringa vuota.

using Microsoft.ML.OnnxRuntimeGenAI;var modelPath = @"D:phi3modelsPhi-3-mini-4k-instruct-onnxcpu_and_mobilecpu-int4-rtn-block-32";var model = new Model(modelPath);var tokenizer = new Tokenizer(model);var systemPrompt = "You are an AI assistant that helps people find information. Answer questions using a direct style. Do not share more information that the requested by the users.";// chat startConsole.WriteLine(@"Ask your question. Type an empty string to Exit.");// chat loopwhile (true){    // Get user question    Console.WriteLine();    Console.Write(@"Q: ");    var userQ = Console.ReadLine();        if (string.IsNullOrEmpty(userQ))    {        break;    }    // show phi3 response    Console.Write("Phi3: ");    var fullPrompt = $"{systemPrompt}{userQ}";    var tokens = tokenizer.Encode(fullPrompt);    var generatorParams = new GeneratorParams(model);    generatorParams.SetSearchOption("max_length", 2048);    generatorParams.SetSearchOption("past_present_share_buffer", false);    generatorParams.SetInputSequences(tokens);    var generator = new Generator(model, generatorParams);    while (!generator.IsDone())    {        generator.ComputeLogits();        generator.GenerateNextToken();        var outputTokens = generator.GetSequence(0);        var newToken = outputTokens.Slice(outputTokens.Length - 1, 1);        var output = tokenizer.Decode(newToken);        Console.Write(output);    }    Console.WriteLine();}

Questo esempio mostra come sfruttare la potenza di Phi-3 e ONNX in un’applicazione C# per creare un’esperienza AI interattiva. Esplora gli altri scenari e non esitare a fornire feedback!