Dela via


Kompilera Hugging Face-modeller som ska köras på Foundry Local

Viktigt!

  • Foundry Local är tillgängligt i förhandsversionen. Offentliga förhandsversioner ger tidig åtkomst till funktioner som är i aktiv distribution.
  • Funktioner, metoder och processer kan ändra eller ha begränsade funktioner, före allmän tillgänglighet (GA).

Foundry Local kör ONNX-modeller på enheten med höga prestanda. Även om modellkatalogen erbjuder förkompilerade alternativ, fungerar alla modeller i ONNX-format.

Använd Olive för att kompilera modeller i Safetensor- eller PyTorch-format till ONNX. Olive optimerar modeller för ONNX, vilket gör dem lämpliga för distribution i Foundry Local. Den använder tekniker som kvantisering och grafoptimering för att förbättra prestanda.

Den här guiden visar hur du:

  • Konvertera och optimera modeller från Hugging Face för att köras i Foundry Local. Exemplen använder Llama-3.2-1B-Instruct-modellen, men alla generativa AI-modeller från Hugging Face fungerar.
  • Kör dina optimerade modeller med Foundry Local.

Förutsättningar

  • Python 3.10 eller senare

Installera Olive

Olive optimerar modeller och konverterar dem till ONNX-format.

pip install olive-ai[auto-opt]

Tips/Råd

Installera Olive i en virtuell miljö med venv eller conda.

Logga in på Hugging Face

Modellen Llama-3.2-1B-Instruct kräver autentisering med Hugging Face.

huggingface-cli login

Anmärkning

Skapa en Hugging Face token och begär åtkomst till modellen innan du fortsätter.

Kompilera modellen

Steg 1: Kör kommandot Olive auto-opt

Använd kommandot Olive auto-opt för att ladda ned, konvertera, kvantifiera och optimera modellen:

olive auto-opt \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --trust_remote_code \
    --output_path models/llama \
    --device cpu \
    --provider CPUExecutionProvider \
    --use_ort_genai \
    --precision int4 \
    --log_level 1

Anmärkning

Kompileringsprocessen tar cirka 60 sekunder, plus nedladdningstid.

Kommandot använder följande parametrar:

Parameter Beskrivning
model_name_or_path Modellkälla: Hugging Face ID, lokal sökväg eller Azure AI Model registry ID
output_path Var du kan spara den optimerade modellen
device Målmaskinvara: cpu, gpu, eller npu
provider Exekveringsleverantör (till exempel CPUExecutionProvider, CUDAExecutionProvider)
precision Modellprecision: fp16, fp32, int4eller int8
use_ort_genai Skapar inferenskonfigurationsfiler

Tips/Råd

Om du har en lokal kopia av modellen kan du använda en lokal sökväg i stället för Hugging Face ID. Till exempel --model_name_or_path models/llama-3.2-1B-Instruct. Olive hanterar konverteringen, optimeringen och kvantiseringen automatiskt.

Steg 2: Byt namn på utdatamodellen

Olive skapar en allmän model katalog. Byt namn på den för enklare återanvändning:

cd models/llama
mv model llama-3.2

Steg 3: Skapa chattmallfil

En chattmall är ett strukturerat format som definierar hur indata- och utdatameddelanden bearbetas för en konversations-AI-modell. Den anger rollerna (till exempel system, användare, assistent) och konversationens struktur, vilket säkerställer att modellen förstår kontexten och genererar lämpliga svar.

Foundry Local kräver en JSON-fil för chattmall med namnet inference_model.json för att generera svar. Mallen innehåller modellnamnet och ett PromptTemplate objekt. Objektet innehåller en {Content} platshållare som Foundry Local matar in vid körning med användarens uppmaning.

{
  "Name": "llama-3.2",
  "PromptTemplate": {
    "assistant": "{Content}",
    "prompt": "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\nCutting Knowledge Date: December 2023\nToday Date: 26 Jul 2024\n\nYou are a helpful assistant.<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n{Content}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n"
  }
}

Skapa chattmallfilen med apply_chat_template metoden från biblioteket Hugging Face:

Anmärkning

I det här exemplet används biblioteket Hugging Face (ett beroende av Olive) för att skapa en chattmall. Om du använder samma virtuella Python-miljö behöver du inte installera den. I en annan miljö installerar du den med pip install transformers.

# generate_inference_model.py
# This script generates the inference_model.json file for the Llama-3.2 model.
import json
import os
from transformers import AutoTokenizer

model_path = "models/llama/llama-3.2"

tokenizer = AutoTokenizer.from_pretrained(model_path)
chat = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "{Content}"},
]


template = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)

json_template = {
  "Name": "llama-3.2",
  "PromptTemplate": {
    "assistant": "{Content}",
    "prompt": template
  }
}

json_file = os.path.join(model_path, "inference_model.json")

with open(json_file, "w") as f:
    json.dump(json_template, f, indent=2)

Kör skriptet med:

python generate_inference_model.py

Kör modellen

Kör din kompilerade modell med Foundry Local CLI, REST API eller OpenAI Python SDK. Ändra först katalogen för modellcache till den modellkatalog som du skapade i föregående steg:

foundry cache cd models
foundry cache ls  # should show llama-3.2

Försiktighet

Ändra modellcachen tillbaka till standardkatalogen när du är klar:

foundry cache cd ./foundry/cache/models

Använda det lokala gjuteri-CLI:et

foundry model run llama-3.2 --verbose

Använda OpenAI Python SDK

Använd OpenAI Python SDK för att interagera med Foundry Local REST API. Installera den med:

pip install openai
pip install foundry-local-sdk

Kör sedan modellen med följande kod:

import openai
from foundry_local import FoundryLocalManager

modelId = "llama-3.2"

# Create a FoundryLocalManager instance. This starts the Foundry Local service if it's not already running and loads the specified model.
manager = FoundryLocalManager(modelId)

# The remaining code uses the OpenAI Python SDK to interact with the local model.

# Configure the client to use the local Foundry service
client = openai.OpenAI(
    base_url=manager.endpoint,
    api_key=manager.api_key  # API key is not required for local usage
)

# Set the model to use and generate a streaming response
stream = client.chat.completions.create(
    model=manager.get_model_info(modelId).id,
    messages=[{"role": "user", "content": "What is the golden ratio?"}],
    stream=True
)

# Print the streaming response
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

Tips/Råd

Använd alla språk som stöder HTTP-begäranden. Mer information finns i Integrerade slutsatsdragnings-SDK:er med Foundry Local.

Återställa modellcachen

När du har använt den anpassade modellen återställer du modellcachen till standardkatalogen:

foundry cache cd ./foundry/cache/models