Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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]
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