Delen via


Hugging Face-modellen compileren om uit te voeren op Foundry Local

Belangrijk

  • Foundry Local is beschikbaar in preview. Openbare preview-versies bieden vroege toegang tot functies die actief zijn geïmplementeerd.
  • Functies, benaderingen en processen kunnen worden gewijzigd of beperkte mogelijkheden hebben, voordat algemene beschikbaarheid (GA) wordt uitgevoerd.

Foundry Local voert ONNX-modellen uit op uw apparaat met hoge prestaties. Hoewel de modelcatalogus vooraf gecompileerde opties biedt, werkt elk model in ONNX-indeling.

Gebruik Olive om modellen in Safetensor- of PyTorch-indeling te compileren naar ONNX. Olive optimaliseert modellen voor ONNX, waardoor ze geschikt zijn voor implementatie in Foundry Local. Het maakt gebruik van technieken zoals kwantisatie en grafiekoptimalisatie om de prestaties te verbeteren.

In deze handleiding ziet u hoe u het volgende kunt doen:

  • Converteer en optimaliseer modellen van Hugging Face om te worden uitgevoerd in Foundry Local. In de voorbeelden wordt het Llama-3.2-1B-Instruct model gebruikt, maar elk generatief AI-model van Hugging Face werkt.
  • Voer uw geoptimaliseerde modellen uit met Foundry Local.

Vereiste voorwaarden

  • Python 3.10 of hoger

Olive installeren

Olive optimaliseert modellen en converteert ze naar de ONNX-indeling.

pip install olive-ai[auto-opt]

Aanbeveling

Installeer Olive in een virtuele omgeving met venv of conda.

Aanmelden bij Hugging Face

Voor het Llama-3.2-1B-Instruct model is Hugging Face-verificatie vereist.

huggingface-cli login

Opmerking

Maak een Hugging Face-token en vraag modeltoegang aan voordat u doorgaat.

Het model compileren

Stap 1: Voer de opdracht Olive auto-opt uit

Gebruik de opdracht Olive auto-opt om het model te downloaden, converteren, kwantiseren en optimaliseren:

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

Opmerking

Het compilatieproces duurt ongeveer 60 seconden, plus de downloadtijd.

De opdracht gebruikt de volgende parameters:

Kenmerk Beschrijving
model_name_or_path Modelbron: Face ID, lokaal pad of Register-id van Azure AI-model knuffelen
output_path Waar het geoptimaliseerde model moet worden opgeslagen
device Doelhardware: cpu, gpuof npu
provider Uitvoeringsprovider (bijvoorbeeld , CPUExecutionProviderCUDAExecutionProvider)
precision Modelprecisie: fp16, fp32, int4 of int8
use_ort_genai Configuratiebestanden voor inferentie maken

Aanbeveling

Als je een lokale kopie van het model hebt, kun je een lokaal pad gebruiken in plaats van de Hugging Face ID. Bijvoorbeeld: --model_name_or_path models/llama-3.2-1B-Instruct. Olive verwerkt de conversie, optimalisatie en kwantisatie automatisch.

Stap 2: De naam van het uitvoermodel wijzigen

Olive maakt een algemene directory model. Wijzig de naam voor eenvoudiger hergebruik:

cd models/llama
mv model llama-3.2

Stap 3: Een chatsjabloonbestand maken

Een chatsjabloon is een gestructureerde indeling waarmee wordt gedefinieerd hoe invoer- en uitvoerberichten worden verwerkt voor een AI-model voor gesprekken. Hiermee worden de rollen (bijvoorbeeld systeem, gebruiker, assistent) en de structuur van het gesprek opgegeven, zodat het model de context begrijpt en de juiste antwoorden genereert.

Foundry Local vereist een JSON-bestand met een chatsjabloon met de naam inference_model.json om antwoorden te genereren. De sjabloon bevat de modelnaam en een PromptTemplate object. Het object bevat een {Content} tijdelijke aanduiding die Foundry Local tijdens runtime injecteert met de gebruikersprompt.

{
  "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"
  }
}

Maak het chatsjabloonbestand met de apply_chat_template methode uit de bibliotheek Hugging Face:

Opmerking

In dit voorbeeld wordt de bibliotheek Hugging Face (een afhankelijkheid van Olive) gebruikt om een chatsjabloon te maken. Als u dezelfde virtuele Python-omgeving gebruikt, hoeft u deze niet te installeren. Installeer deze in een andere omgeving met 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)

Voer het script uit met behulp van:

python generate_inference_model.py

Het model uitvoeren

Voer uw gecompileerde model uit met de Foundry Local CLI, REST API of OpenAI Python SDK. Wijzig eerst de map van de modelcache in de modellenmap die u in de vorige stap hebt gemaakt:

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

Waarschuwing

Verander de modelcache terug naar de standaardmap nadat u klaar bent.

foundry cache cd ./foundry/cache/models

De lokale CLI van Foundry gebruiken

foundry model run llama-3.2 --verbose

De OpenAI Python SDK gebruiken

Gebruik de OpenAI Python SDK om te communiceren met de Foundry Local REST API. Installeer het met:

pip install openai
pip install foundry-local-sdk

Voer vervolgens het model uit met de volgende code:

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)

Aanbeveling

Gebruik elke taal die HTTP-aanvragen ondersteunt. Zie Geïntegreerde deductie-SDK's met Foundry Local voor meer informatie.

De modelcache opnieuw instellen

Nadat u het aangepaste model hebt gebruikt, stelt u de modelcache opnieuw in op de standaardmap:

foundry cache cd ./foundry/cache/models