Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Foundry Local запускает модели ONNX на устройстве. Используйте Olive для преобразования и оптимизации моделей из Hugging Face (Safetensors или PyTorch) в ONNX, чтобы запускать их с Foundry Local.
Важно
Параметры оливкового интерфейса командной строки и оптимизации изменяются со временем, а один пример командной строки может не работать для каждой модели, устройства или поставщика выполнения.
Для наиболее надежных и актуальных примеров начните с репозитория оливковых рецептов. Он предоставляет набор целевых рецептов для различных моделей, оптимизированных для различных аппаратных средств с различными параметрами оптимизации.
- Дополнительные конфигурации оливкового интерфейса командной строки для этой модели см. в папке рецептов: https://github.com/microsoft/olive-recipes/tree/main/meta-llama-Llama-3.2-1B-Instruct/olive
В этом руководстве показано, как:
- Преобразование и оптимизация моделей из Hugging Face для запуска в Foundry Local. В примерах используется
Llama-3.2-1B-Instructмодель, но многие модели Hugging Face могут работать. - Запустите оптимизированные модели с помощью Foundry Local.
Необходимые условия
- Python 3.10 или более поздней версии (требуется для компиляции Оливки)
- Учетная запись Hugging Face и токен с доступом к
meta-llama/Llama-3.2-1B-Instruct
Установка Olive и зависимостей
Олив оптимизирует модели и преобразует их в формат ONNX.
pip install olive-ai
pip install transformers onnxruntime-genai
Проверьте установку: olive --help выводит сведения об использовании.
Войти на Hugging Face
Для Llama-3.2-1B-Instruct модели требуется аутентификация Hugging Face.
hf auth login
Примечание
Перед тем как продолжить, создайте токен Hugging Face и запросите доступ к модели.
Совет
Если hf не найден, установите его, выполнив pip install -U huggingface_hub.
Компиляция модели
В этом разделе описывается компиляция вручную. Команда "Оливка optimize " загружает, преобразует, квантуизирует и оптимизирует модель.
Примечание
Это ручной пример, который может потребовать корректировки для различных моделей или аппаратных целевых объектов.
Выполните команду Olive
optimize.olive optimize \ --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \ --trust_remote_code \ --output_path models/llama \ --device cpu \ --provider CPUExecutionProvider \ --precision int4 \ --log_level 1Команда использует следующие параметры:
Параметр Описание model_name_or_pathИсточник модели: ID Hugging Face, локальный путь или идентификатор реестра моделей Azure ИИ output_pathГде сохранить оптимизированную модель deviceЦелевое оборудование: cpu,gpuилиnpuproviderПоставщик выполнения (например, CPUExecutionProvider,CUDAExecutionProvider)precisionТочность модели: fp16, ,fp32int4илиint8Совет
Если у вас есть локальная копия модели, используйте локальный путь вместо Hugging Face ID. Например,
--model_name_or_path models/llama-3.2-1B-Instruct. Olive автоматически обрабатывает преобразование, оптимизацию и квантизацию.Примечание
Процесс компиляции занимает около 60 секунд, а также время загрузки.
Обеспечьте доступ модели для Foundry Local, создав файл
inference_model.jsonв каталоге модели.# generate_inference_model.py import json import os model_path = "models/llama" json_template = { "Name": "llama-3.2:1" # set the model name as you like, the default version is 1 } json_file = os.path.join(model_path, "inference_model.json") with open(json_file, "w") as f: json.dump(json_template, f, indent=2)Запустите скрипт:
python generate_inference_model.pyУбедитесь, что файл существует:
models/llama/inference_model.json
Запуск скомпилированной модели
Используйте Foundry Local C# SDK для загрузки и выполнения вашей скомпилированной модели с помощью встроенного API завершения чата. Этот подход не требует REST-сервера — пакет SDK взаимодействует напрямую со средой выполнения.
Необходимые условия
- пакет SDK .NET 8.0 или более поздней версии
Установка пакетов
Если вы разрабатываете или поставляете программы для Windows, выберите вкладку Windows. Пакет Windows интегрируется со средой выполнения Windows ML — он обеспечивает ту же поверхность API с более широким диапазоном аппаратного ускорения.
dotnet add package Microsoft.AI.Foundry.Local.WinML
dotnet add package OpenAI
Примеры C# в репозитории GitHub предварительно настроены. Если вы создаете с нуля, ознакомьтесь со справочником по локальному пакету SDK Foundry для получения дополнительных сведений о настройке проекта C# с помощью Foundry Local.
Выполнение вывода в скомпилированной модели
Замените содержимое Program.cs следующим кодом:
using Microsoft.AI.Foundry.Local;
using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels;
using Microsoft.Extensions.Logging;
CancellationToken ct = CancellationToken.None;
// Point ModelCacheDir at the directory containing your compiled model
var config = new Configuration
{
AppName = "run-compiled-model",
LogLevel = Microsoft.AI.Foundry.Local.LogLevel.Information,
ModelCacheDir = "../models"
};
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
});
var logger = loggerFactory.CreateLogger<Program>();
await FoundryLocalManager.CreateAsync(config, logger);
var mgr = FoundryLocalManager.Instance;
var catalog = await mgr.GetCatalogAsync();
// List cached models to find your compiled model
var cachedModels = await catalog.GetCachedModelsAsync();
Console.WriteLine("Cached models:");
foreach (var m in cachedModels)
{
Console.WriteLine($" {m.Id}");
}
// Select your compiled model from the cached list
var model = cachedModels.FirstOrDefault(m => m.Id.Contains("llama-3.2:1"))
?? throw new Exception("Compiled model not found. Verify the ModelCacheDir path.");
await model.LoadAsync();
// Use native chat completions
var chatClient = await model.GetChatClientAsync();
List<ChatMessage> messages = new()
{
new ChatMessage { Role = "user", Content = "What is the golden ratio?" }
};
var streamingResponse = chatClient.CompleteChatStreamingAsync(messages, ct);
await foreach (var chunk in streamingResponse)
{
Console.Write(chunk.Choices[0].Delta.Content);
Console.Out.Flush();
}
Console.WriteLine();
await model.UnloadAsync();
Запустите приложение:
dotnet run
Используйте Local JavaScript SDK Foundry для загрузки и запуска вашей скомпилированной модели с помощью API для нативных завершений чата.
Необходимые условия
- Node.js 20 или новее.
Установка пакетов
Если вы разрабатываете или поставляете программы для Windows, выберите вкладку Windows. Пакет Windows интегрируется со средой выполнения Windows ML — он обеспечивает ту же поверхность API с более широким диапазоном аппаратного ускорения.
npm install foundry-local-sdk-winml openai
Выполнение вывода в скомпилированной модели
Скопируйте и вставьте следующий код в файл JavaScript с именем app.js:
import { FoundryLocalManager } from 'foundry-local-sdk';
// Initialize the Foundry Local SDK with custom model cache directory
const manager = FoundryLocalManager.create({
appName: 'run-compiled-model',
logLevel: 'info',
modelCacheDir: '../models'
});
// List cached models to find your compiled model
const cachedModels = await manager.catalog.getCachedModels();
console.log('Cached models:');
for (const m of cachedModels) {
console.log(` ${m.id}`);
}
// Select your compiled model from the cached list
const model = cachedModels.find(m => m.id.includes('llama-3.2:1'));
if (!model) {
throw new Error('Compiled model not found. Verify the modelCacheDir path.');
}
// Load the model
await model.load();
// Create a chat client
const chatClient = model.createChatClient();
// Generate a response
const completion = await chatClient.completeChat([
{ role: 'user', content: 'What is the golden ratio?' }
]);
console.log(completion.choices[0]?.message?.content);
// Unload the model
await model.unload();
Запустите приложение:
node app.js
Используйте локальный Python SDK Foundry, чтобы загрузить и запустить скомпилированную модель с помощью API для завершения чатов на родном языке.
Необходимые условия
- Python 3.11 или более поздней версии, установленные.
Установка пакетов
Если вы разрабатываете или поставляете программы для Windows, выберите вкладку Windows. Пакет Windows интегрируется со средой выполнения Windows ML — он обеспечивает ту же поверхность API с более широким диапазоном аппаратного ускорения.
pip install foundry-local-sdk-winml openai
Выполнение вывода в скомпилированной модели
Скопируйте и вставьте следующий код в файл Python с именем app.py:
import asyncio
from foundry_local_sdk import Configuration, FoundryLocalManager
async def main():
# Point model_cache_dir at the directory containing your compiled model
config = Configuration(
app_name="run-compiled-model",
model_cache_dir="../models",
)
FoundryLocalManager.initialize(config)
manager = FoundryLocalManager.instance
# List cached models to find your compiled model
cached_models = manager.catalog.get_cached_models()
print("Cached models:")
for m in cached_models:
print(f" {m.id}")
# Select your compiled model from the cached list
model = next((m for m in cached_models if "llama-3.2:1" in m.id), None)
if model is None:
raise Exception("Compiled model not found. Verify the model_cache_dir path.")
# Load the model
model.load()
# Get a chat client
client = model.get_chat_client()
# Stream the response
messages = [{"role": "user", "content": "What is the golden ratio?"}]
for chunk in client.complete_streaming_chat(messages):
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
print()
# Tidy up - unload the model
model.unload()
if __name__ == "__main__":
asyncio.run(main())
Запустите приложение:
python app.py
Используйте пакет SDK Foundry Local Rust для загрузки и запуска скомпилированной модели с помощью API завершения собственного чата.
Необходимые условия
- Rust и Cargo установлены (Rust 1.70.0 или более поздней версии).
Установка пакетов
Если вы разрабатываете или поставляете программы для Windows, выберите вкладку Windows. Пакет Windows интегрируется со средой выполнения Windows ML — он обеспечивает ту же поверхность API с более широким диапазоном аппаратного ускорения.
cargo add foundry-local-sdk --features winml
cargo add tokio --features full
cargo add tokio-stream anyhow
Выполнение вывода в скомпилированной модели
Замените содержимое src/main.rs следующим кодом:
use foundry_local_sdk::{
ChatCompletionRequestMessage, ChatCompletionRequestUserMessage,
FoundryLocalConfig, FoundryLocalManager,
};
use std::io::Write;
use tokio_stream::StreamExt;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Point model_cache_dir at the directory containing your compiled model
let config = FoundryLocalConfig::new("run-compiled-model")
.with_model_cache_dir("../models");
let manager = FoundryLocalManager::create(config)?;
// List cached models to find your compiled model
let cached_models = manager.catalog().get_cached_models().await?;
println!("Cached models:");
for m in &cached_models {
println!(" {}", m.id());
}
// Select your compiled model from the cached list
let model = cached_models
.iter()
.find(|m| m.id().contains("llama-3.2:1"))
.ok_or_else(|| anyhow::anyhow!("Compiled model not found. Verify the model_cache_dir path."))?;
// Load the model
model.load().await?;
// Create a chat client
let client = model.create_chat_client().temperature(0.7).max_tokens(256);
// Stream the response
let messages: Vec<ChatCompletionRequestMessage> = vec![
ChatCompletionRequestUserMessage::new("What is the golden ratio?").into(),
];
let mut stream = client.complete_streaming_chat(&messages, None).await?;
while let Some(chunk) = stream.next().await {
let chunk = chunk?;
if let Some(content) = &chunk.choices[0].delta.content {
print!("{}", content);
std::io::stdout().flush()?;
}
}
println!();
// Tidy up - unload the model
model.unload().await?;
Ok(())
}
Запустите приложение:
cargo run
Устранение неполадок
- Если
olive optimizeзавершается ошибкой аутентификации или доступа, убедитесь, что подтвержден ваш токен Hugging Face и одобрен запрос на доступ к модели. -
hfЕсли команда не найдена, установите ее, выполнив командуpip install -U huggingface_hub. - Если скомпилированная модель не найдена в списке кэшированных моделей, проверьте, что
ModelCacheDirпуть вConfigurationуказывает на родительский каталог, содержащий папку модели. - Если возникают ошибки сборки .NET, ссылающиеся на
net8.0, установите пакет SDK .NET 8.0.