Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
- A Fábrica Local está disponível na versão prévia. As visualizações públicas fornecem acesso antecipado a recursos que estão em implantação ativa.
- Os recursos, abordagens e processos podem mudar ou ter seus recursos limitados antes da GA (disponibilidade geral).
O SDK Local do Foundry simplifica o gerenciamento de modelos de IA em ambientes locais fornecendo operações de plano de controle separadas do código de inferência do plano de dados. Essa referência documenta implementações do SDK para Python, JavaScript, C#e Rust.
Referência do SDK do Python
Pré-requisitos
- Instale o Foundry Local e verifique se o
foundrycomando está disponível em seuPATH. - Use o Python 3.9 ou posterior.
Instalação
Instale o pacote do Python:
pip install foundry-local-sdk
Início Rápido
Use este snippet para verificar se o SDK pode iniciar o serviço e acessar o catálogo local.
from foundry_local import FoundryLocalManager
manager = FoundryLocalManager()
manager.start_service()
catalog = manager.list_catalog_models()
print(f"Catalog models available: {len(catalog)}")
Este exemplo imprime um número diferente de zero quando o serviço está em execução e o catálogo está disponível.
Referências:
Classe FoundryLocalManager
A FoundryLocalManager classe fornece métodos para gerenciar modelos, cache e o serviço Local do Foundry.
Inicialização
from foundry_local import FoundryLocalManager
# Initialize and optionally bootstrap with a model
manager = FoundryLocalManager(alias_or_model_id=None, bootstrap=True)
-
alias_or_model_id: (opcional) Alias ou ID do Modelo para baixar e carregar na inicialização. -
bootstrap: (padrão True) Se True, iniciará o serviço se não estiver em execução e carregará o modelo, se fornecido.
Uma anotação sobre aliases
Muitos métodos descritos nessa referência têm um alias_or_model_id parâmetro na assinatura. Você pode passar para o método um alias ou uma ID de modelo como um valor. Usar um alias levará a:
- Selecione o melhor modelo para o hardware disponível. Por exemplo, se uma GPU Nvidia CUDA estiver disponível, o Foundry Local selecionará o modelo CUDA. Se uma NPU com suporte estiver disponível, o Foundry Local selecionará o modelo de NPU.
- Permita que você use um nome mais curto sem precisar se lembrar da ID do modelo.
Dica
É recomendável passar para o alias_or_model_id parâmetro um alias pois ao implantar seu aplicativo, o Foundry Local adquire o melhor modelo para o computador do usuário final durante a execução.
Observação
Se você tiver uma NPU Intel no Windows, verifique se instalou o driver de NPU Intel para uma aceleração de NPU ideal.
Gerenciamento de Serviços
| Método | Assinatura | Descrição |
|---|---|---|
is_service_running() |
() -> bool |
Verifica se o serviço Foundry Local está em execução. |
start_service() |
() -> None |
Inicia o serviço Foundry Local. |
service_uri |
@property -> str |
Retorna o URI do serviço. |
endpoint |
@property -> str |
Retorna o endpoint do serviço. |
api_key |
@property -> str |
Retorna a chave de API (de env ou padrão). |
Gerenciamento de Catálogo
| Método | Assinatura | Descrição |
|---|---|---|
list_catalog_models() |
() -> list[FoundryModelInfo] |
Lista todos os modelos disponíveis no catálogo. |
refresh_catalog() |
() -> None |
Atualiza o catálogo de modelos. |
get_model_info() |
(alias_or_model_id: str, raise_on_not_found=False) -> FoundryModelInfo \| None |
Obtém informações do modelo por apelido ou ID. |
Gerenciamento de cache
| Método | Assinatura | Descrição |
|---|---|---|
get_cache_location() |
() -> str |
Retorna o caminho do diretório de cache do modelo. |
list_cached_models() |
() -> list[FoundryModelInfo] |
Lista os modelos baixados para o cache local. |
Gerenciamento de Modelos
| Método | Assinatura | Descrição |
|---|---|---|
download_model() |
(alias_or_model_id: str, token: str = None, force: bool = False) -> FoundryModelInfo |
Baixa um modelo para o cache local. |
load_model() |
(alias_or_model_id: str, ttl: int = 600) -> FoundryModelInfo |
Carrega um modelo no servidor de inferência. |
unload_model() |
(alias_or_model_id: str, force: bool = False) -> None |
Descarrega um modelo do servidor de inferência. |
list_loaded_models() |
() -> list[FoundryModelInfo] |
Lista todos os modelos atualmente carregados no serviço. |
FoundryModelInfo
Os métodos list_catalog_models()e list_cached_models()list_loaded_models() retornam uma lista de FoundryModelInfo objetos. Você pode usar as informações contidas neste objeto para refinar ainda mais a lista. Ou obtenha as informações de um modelo diretamente chamando o get_model_info(alias_or_model_id) método.
Esses objetos contêm os seguintes campos:
| Campo | Tipo | Descrição |
|---|---|---|
alias |
str |
Alias do modelo. |
id |
str |
Identificador exclusivo do modelo. |
version |
str |
Versão do modelo. |
execution_provider |
str |
O acelerador (provedor de execução) usado para executar o modelo. |
device_type |
DeviceType |
Tipo de dispositivo do modelo: CPU, GPU, NPU. |
uri |
str |
URI do modelo. |
file_size_mb |
int |
Tamanho do modelo no disco em MB. |
supports_tool_calling |
bool |
Se o modelo dá suporte à chamada de ferramenta. |
prompt_template |
dict \| None |
Modelo de solicitação para o modelo. |
provider |
str |
Provedor do modelo (em que o modelo é publicado). |
publisher |
str |
Publicador do modelo (que publicou o modelo). |
license |
str |
O nome da licença do modelo. |
task |
str |
Tarefa do modelo. Uma opção entre chat-completions ou automatic-speech-recognition. |
ep_override |
str \| None |
Substituição do provedor de execução, caso seja diferente do padrão do modelo. |
Provedores de execução
Um destes:
-
CPUExecutionProvider– Execução baseada em CPU -
CUDAExecutionProvider– Execução da GPU NVIDIA CUDA -
WebGpuExecutionProvider– Execução do WebGPU -
QNNExecutionProvider- Execução de rede neural (NPU) da Qualcomm -
OpenVINOExecutionProvider– Execução do Intel OpenVINO -
NvTensorRTRTXExecutionProvider– Execução do NVIDIA TensorRT -
VitisAIExecutionProvider- Execução de IA do AMD Vitis
Exemplo de Uso
O código a seguir demonstra como usar a FoundryLocalManager classe para gerenciar modelos e interagir com o serviço Local do Foundry.
from foundry_local import FoundryLocalManager
# By using an alias, the most suitable model will be selected
# to your end-user's device.
alias = "qwen2.5-0.5b"
# Create a FoundryLocalManager instance. This will start the Foundry.
manager = FoundryLocalManager()
# List available models in the catalog
catalog = manager.list_catalog_models()
print(f"Available models in the catalog: {catalog}")
# Download and load a model
model_info = manager.download_model(alias)
model_info = manager.load_model(alias)
print(f"Model info: {model_info}")
# List models in cache
local_models = manager.list_cached_models()
print(f"Models in cache: {local_models}")
# List loaded models
loaded = manager.list_loaded_models()
print(f"Models running in the service: {loaded}")
# Unload a model
manager.unload_model(alias)
Este exemplo lista modelos, baixa e carrega um modelo e, em seguida, descarrega-o.
Referências:
Integrar com o SDK do OpenAI
Instale o pacote OpenAI:
pip install openai
O código a seguir demonstra como integrar o FoundryLocalManager SDK do OpenAI para interagir com um modelo local.
import openai
from foundry_local import FoundryLocalManager
# By using an alias, the most suitable model will be downloaded
# to your end-user's device.
alias = "qwen2.5-0.5b"
# Create a FoundryLocalManager instance. This will start the Foundry
# Local service if it is not already running and load the specified model.
manager = FoundryLocalManager(alias)
# 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(alias).id,
messages=[{"role": "user", "content": "Why is the sky blue?"}],
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)
Este exemplo transmite uma resposta de conclusão do chat do modelo local.
Referências:
Referência do SDK do JavaScript
Pré-requisitos
- Instale o Foundry Local e verifique se o
foundrycomando está disponível em seuPATH.
Instalação
Instale o pacote do npm:
npm install foundry-local-sdk
Início Rápido
Use este snippet para verificar se o SDK pode iniciar o serviço e acessar o catálogo local.
import { FoundryLocalManager } from "foundry-local-sdk";
const manager = new FoundryLocalManager();
await manager.startService();
const catalogModels = await manager.listCatalogModels();
console.log(`Catalog models available: ${catalogModels.length}`);
Este exemplo imprime um número diferente de zero quando o serviço está em execução e o catálogo está disponível.
Referências:
Classe FoundryLocalManager
A FoundryLocalManager classe permite que você gerencie modelos, controle o cache e interaja com o serviço Local do Foundry em ambientes de navegador e Node.js.
Inicialização
import { FoundryLocalManager } from "foundry-local-sdk";
const foundryLocalManager = new FoundryLocalManager();
Opções disponíveis:
-
host: URL base do serviço Foundry Local -
fetch: (opcional) Implementação de busca personalizada para ambientes como Node.js
Uma anotação sobre aliases
Muitos métodos descritos nessa referência têm um aliasOrModelId parâmetro na assinatura. Você pode passar para o método um alias ou uma ID de modelo como um valor. Usar um alias levará a:
- Selecione o melhor modelo para o hardware disponível. Por exemplo, se uma GPU Nvidia CUDA estiver disponível, o Foundry Local selecionará o modelo CUDA. Se uma NPU com suporte estiver disponível, o Foundry Local selecionará o modelo de NPU.
- Permita que você use um nome mais curto sem precisar se lembrar da ID do modelo.
Dica
É recomendável passar para o aliasOrModelId parâmetro um alias pois ao implantar seu aplicativo, o Foundry Local adquire o melhor modelo para o computador do usuário final durante a execução.
Observação
Se você tiver uma NPU Intel no Windows, verifique se instalou o driver de NPU Intel para uma aceleração de NPU ideal.
Gerenciamento de Serviços
| Método | Assinatura | Descrição |
|---|---|---|
init() |
(aliasOrModelId?: string) => Promise<FoundryModelInfo \| void> |
Inicializa o SDK e, opcionalmente, carrega um modelo. |
isServiceRunning() |
() => Promise<boolean> |
Verifica se o serviço Foundry Local está em execução. |
startService() |
() => Promise<void> |
Inicia o serviço Foundry Local. |
serviceUrl |
string |
A URL base do serviço Local do Foundry. |
endpoint |
string |
O ponto de extremidade da API (serviceUrl + /v1). |
apiKey |
string |
A chave de API (ausente) |
Gerenciamento de Catálogo
| Método | Assinatura | Descrição |
|---|---|---|
listCatalogModels() |
() => Promise<FoundryModelInfo[]> |
Lista todos os modelos disponíveis no catálogo. |
refreshCatalog() |
() => Promise<void> |
Atualiza o catálogo de modelos. |
getModelInfo() |
(aliasOrModelId: string, throwOnNotFound = false) => Promise<FoundryModelInfo \| null> |
Obtém informações do modelo por apelido ou ID. |
Gerenciamento de cache
| Método | Assinatura | Descrição |
|---|---|---|
getCacheLocation() |
() => Promise<string> |
Retorna o caminho do diretório de cache do modelo. |
listCachedModels() |
() => Promise<FoundryModelInfo[]> |
Lista os modelos baixados para o cache local. |
Gerenciamento de Modelos
| Método | Assinatura | Descrição |
|---|---|---|
downloadModel() |
(aliasOrModelId: string, token?: string, force = false, onProgress?) => Promise<FoundryModelInfo> |
Baixa um modelo para o cache local. |
loadModel() |
(aliasOrModelId: string, ttl = 600) => Promise<FoundryModelInfo> |
Carrega um modelo no servidor de inferência. |
unloadModel() |
(aliasOrModelId: string, force = false) => Promise<void> |
Descarrega um modelo do servidor de inferência. |
listLoadedModels() |
() => Promise<FoundryModelInfo[]> |
Lista todos os modelos atualmente carregados no serviço. |
Exemplo de Uso
O código a seguir demonstra como usar a FoundryLocalManager classe para gerenciar modelos e interagir com o serviço Local do Foundry.
import { FoundryLocalManager } from "foundry-local-sdk";
// By using an alias, the most suitable model will be downloaded
// to your end-user's device.
// TIP: You can find a list of available models by running the
// following command in your terminal: `foundry model list`.
const alias = "qwen2.5-0.5b";
const manager = new FoundryLocalManager();
// Initialize the SDK and optionally load a model
const modelInfo = await manager.init(alias);
console.log("Model Info:", modelInfo);
// Check if the service is running
const isRunning = await manager.isServiceRunning();
console.log(`Service running: ${isRunning}`);
// List available models in the catalog
const catalog = await manager.listCatalogModels();
// Download and load a model
await manager.downloadModel(alias);
await manager.loadModel(alias);
// List models in cache
const localModels = await manager.listCachedModels();
// List loaded models
const loaded = await manager.listLoadedModels();
// Unload a model
await manager.unloadModel(alias);
Este exemplo baixa e carrega um modelo e, em seguida, lista modelos armazenados em cache e carregados.
Referências:
Integração com o Cliente OpenAI
Instale o pacote OpenAI:
npm install openai
O código a seguir demonstra como integrar o FoundryLocalManager com o cliente OpenAI para interagir com um modelo local.
import { OpenAI } from "openai";
import { FoundryLocalManager } from "foundry-local-sdk";
// By using an alias, the most suitable model will be downloaded
// to your end-user's device.
// TIP: You can find a list of available models by running the
// following command in your terminal: `foundry model list`.
const alias = "qwen2.5-0.5b";
// Create a FoundryLocalManager instance. This will start the Foundry
// Local service if it is not already running.
const foundryLocalManager = new FoundryLocalManager();
// Initialize the manager with a model. This will download the model
// if it is not already present on the user's device.
const modelInfo = await foundryLocalManager.init(alias);
console.log("Model Info:", modelInfo);
const openai = new OpenAI({
baseURL: foundryLocalManager.endpoint,
apiKey: foundryLocalManager.apiKey,
});
async function streamCompletion() {
const stream = await openai.chat.completions.create({
model: modelInfo.id,
messages: [{ role: "user", content: "What is the golden ratio?" }],
stream: true,
});
for await (const chunk of stream) {
if (chunk.choices[0]?.delta?.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
}
}
streamCompletion();
Este exemplo transmite em fluxo contínuo uma resposta de conclusão de um chat do modelo local.
Referências:
Uso do Navegador
O SDK inclui uma versão compatível com o navegador em que você deve especificar a URL do host manualmente:
import { FoundryLocalManager } from "foundry-local-sdk/browser";
// Specify the service URL
// Run the Foundry Local service using the CLI: `foundry service start`
// and use the URL from the CLI output
const host = "HOST";
const manager = new FoundryLocalManager({ host });
// Note: The `init`, `isServiceRunning`, and `startService` methods
// are not available in the browser version
Observação
A versão do navegador não dá suporte aos métodos init, isServiceRunning e startService. Você deve garantir que o serviço Local do Foundry esteja em execução antes de usar o SDK em um ambiente de navegador. Você pode iniciar o serviço usando a CLI Local do Foundry: foundry service start. Você pode obter a URL do serviço na saída da CLI.
Exemplo de Uso
import { FoundryLocalManager } from "foundry-local-sdk/browser";
// Specify the service URL
// Run the Foundry Local service using the CLI: `foundry service start`
// and use the URL from the CLI output
const host = "HOST";
const manager = new FoundryLocalManager({ host });
const alias = "qwen2.5-0.5b";
// Get all available models
const catalog = await manager.listCatalogModels();
console.log("Available models in catalog:", catalog);
// Download and load a specific model
await manager.downloadModel(alias);
await manager.loadModel(alias);
// View models in your local cache
const localModels = await manager.listCachedModels();
console.log("Cached models:", localModels);
// Check which models are currently loaded
const loaded = await manager.listLoadedModels();
console.log("Loaded models in inference service:", loaded);
// Unload a model when finished
await manager.unloadModel(alias);
Referências:
Referência do SDK do C#
Guia de configuração do projeto
Há dois pacotes NuGet para o SDK Local do Foundry - um WinML e um pacote multiplataforma - que têm a mesma superfície de API, mas são otimizados para plataformas diferentes:
-
Windows: Usa o
Microsoft.AI.Foundry.Local.WinMLpacote específico para aplicativos do Windows, que usa a estrutura do WinML (Windows Machine Learning). -
Multiplataforma: usa o
Microsoft.AI.Foundry.Localpacote que pode ser usado para aplicativos multiplataforma (Windows, Linux, macOS).
Dependendo da plataforma de destino, siga estas instruções para criar um novo aplicativo C# e adicionar as dependências necessárias:
Use o Foundry Local em seu projeto em C# seguindo estas instruções específicas do Windows ou multiplataforma (macOS/Linux/Windows):
- Crie um novo projeto em C# e navegue até ele:
dotnet new console -n app-name cd app-name - Abra e edite o
app-name.csprojarquivo para:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net9.0-windows10.0.26100</TargetFramework> <RootNamespace>app-name</RootNamespace> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <WindowsAppSDKSelfContained>false</WindowsAppSDKSelfContained> <WindowsPackageType>None</WindowsPackageType> <EnableCoreMrtTooling>false</EnableCoreMrtTooling> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AI.Foundry.Local.WinML" Version="0.8.2.1" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.10" /> <PackageReference Include="OpenAI" Version="2.5.0" /> </ItemGroup> </Project> - Crie um
nuget.configarquivo na raiz do projeto com o seguinte conteúdo para que os pacotes sejam restaurados corretamente:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> <add key="ORT" value="https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT/nuget/v3/index.json" /> </packageSources> <packageSourceMapping> <packageSource key="nuget.org"> <package pattern="*" /> </packageSource> <packageSource key="ORT"> <package pattern="*Foundry*" /> </packageSource> </packageSourceMapping> </configuration>
Início Rápido
Use este snippet para verificar se o SDK pode inicializar e acessar o catálogo de modelos local.
using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.Logging;
using System.Linq;
var config = new Configuration
{
AppName = "app-name",
LogLevel = Microsoft.AI.Foundry.Local.LogLevel.Information,
};
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
});
var logger = loggerFactory.CreateLogger<Program>();
await FoundryLocalManager.CreateAsync(config, logger);
var manager = FoundryLocalManager.Instance;
var catalog = await manager.GetCatalogAsync();
var models = await catalog.ListModelsAsync();
Console.WriteLine($"Models available: {models.Count()}");
Este exemplo imprime o número de modelos disponíveis para seu hardware.
Referências:
Reprojetar
Para melhorar sua capacidade de enviar aplicativos usando a IA no dispositivo, há alterações substanciais na arquitetura do SDK do C# na versão 0.8.0 e posterior. Nesta seção, descrevemos as principais alterações para ajudá-lo a migrar seus aplicativos para a versão mais recente do SDK.
Observação
Na versão 0.8.0 e posteriores do SDK, há alterações significativas na API de versões anteriores.
O diagrama a seguir mostra como a arquitetura anterior - para versões anteriores ao 0.8.0 - dependia fortemente do uso de um servidor web REST para gerenciar modelos e inferências, como finalizações de chat.
O SDK usaria uma RPC (Chamada de Procedimento Remoto) para localizar o executável da CLI Local do Foundry no computador, iniciaria o servidor Web e se comunicaria com ele por HTTP. Essa arquitetura tinha várias limitações, incluindo:
- Complexidade no gerenciamento do ciclo de vida do webserver.
- Implantação desafiadora: os usuários finais precisavam ter a CLI Local do Foundry instalada em seus computadores e em seu aplicativo.
- O gerenciamento de versão da CLI e do SDK pode levar a problemas de compatibilidade.
Para resolver esses problemas, a arquitetura reprojetada na versão 0.8.0 e posterior usa uma abordagem mais simplificada. A nova arquitetura é a seguinte:
Nesta nova arquitetura:
- Seu aplicativo é autossuficiente. Ele não exige que a CLI Local do Foundry seja instalada separadamente no computador do usuário final, facilitando a implantação de aplicativos.
- O servidor Web REST é opcional. Você ainda poderá usar o servidor Web se quiser se integrar a outras ferramentas que se comunicam por HTTP. Leia Usar conclusões de chat por meio do servidor REST com Fábrica local para obter detalhes sobre como usar esse recurso.
- O SDK tem suporte nativo para conclusões de chat e transcrições de áudio, permitindo que você crie aplicativos de IA de conversa com menos dependências. Leia Usar a API de conclusões de chat nativo da Fábrica local para obter detalhes sobre como usar esse recurso.
- Em dispositivos Windows, você pode usar uma versão do Windows ML que lida com a aceleração de hardware para modelos no dispositivo através da importação do runtime e dos drivers corretos.
Alterações de API
A versão 0.8.0 e posteriores fornecem uma API mais orientada a objetos e composível. O ponto de entrada principal continua sendo a classe FoundryLocalManager, mas, em vez de ser um conjunto simples de métodos que operam por meio de chamadas estáticas para uma API HTTP sem estado, o SDK agora expõe métodos na instância FoundryLocalManager que mantém estado a respeito do serviço e dos modelos.
| Primitivo | Versões < 0.8.0 | Versões >= 0.8.0 |
|---|---|---|
| Configuration | N/A | config = Configuration(...) |
| Obter Gerenciador | mgr = FoundryLocalManager(); |
await FoundryLocalManager.CreateAsync(config, logger);var mgr = FoundryLocalManager.Instance; |
| Obter Catálogo | N/A | catalog = await mgr.GetCatalogAsync(); |
| Listar modelos | mgr.ListCatalogModelsAsync(); |
catalog.ListModelsAsync(); |
| Obter modelo | mgr.GetModelInfoAsync("aliasOrModelId"); |
catalog.GetModelAsync(alias: "alias"); |
| Obter Variant | N/A | model.SelectedVariant; |
| Definir Variant | N/A | model.SelectVariant(); |
| Baixar um modelo | mgr.DownloadModelAsync("aliasOrModelId"); |
model.DownloadAsync() |
| Carregar um modelo | mgr.LoadModelAsync("aliasOrModelId"); |
model.LoadAsync() |
| Descarregar um modelo | mgr.UnloadModelAsync("aliasOrModelId"); |
model.UnloadAsync() |
| Listar modelos carregados | mgr.ListLoadedModelsAsync(); |
catalog.GetLoadedModelsAsync(); |
| Obter o caminho do modelo | N/A | model.GetPathAsync() |
| Iniciar serviço | mgr.StartServiceAsync(); |
mgr.StartWebServerAsync(); |
| Parar o serviço | mgr.StopServiceAsync(); |
mgr.StopWebServerAsync(); |
| Local do cache | mgr.GetCacheLocationAsync(); |
config.ModelCacheDir |
| Listar modelos armazenados em cache | mgr.ListCachedModelsAsync(); |
catalog.GetCachedModelsAsync(); |
A API permite que a Fábrica local seja mais configurável no servidor Web, log, local do cache e seleção de variante do modelo. Por exemplo, a Configuration classe permite que você configure o nome do aplicativo, o nível de log, as URLs do servidor Web e os diretórios para dados do aplicativo, cache de modelo e logs:
var config = new Configuration
{
AppName = "app-name",
LogLevel = Microsoft.AI.Foundry.Local.LogLevel.Information,
Web = new Configuration.WebService
{
Urls = "http://127.0.0.1:55588"
},
AppDataDir = "./foundry_local_data",
ModelCacheDir = "{AppDataDir}/model_cache",
LogsDir = "{AppDataDir}/logs"
};
Referências:
Na versão anterior do SDK do C# Local do Foundry, você não pôde definir essas configurações diretamente por meio do SDK, o que limitou sua capacidade de personalizar o comportamento do serviço.
Reduzir o tamanho do pacote do aplicativo
O SDK do Foundry Local puxa o Microsoft.ML.OnnxRuntime.Foundry pacote NuGet como uma dependência. O Microsoft.ML.OnnxRuntime.Foundry pacote fornece o pacote de runtime de inferência, que é o conjunto de bibliotecas necessárias para executar com eficiência a inferência em dispositivos de hardware de fornecedor específicos. O pacote de runtime de inferência inclui os seguintes componentes:
-
Biblioteca de runtime do ONNX: o mecanismo de inferência principal (
onnxruntime.dll). -
Biblioteca do EP (Provedor de Execução de Runtime) do ONNX. Um back-end específico para hardware no ONNX Runtime que otimiza e executa partes de um modelo de aprendizado de máquina em um acelerador de hardware. Por exemplo:
- CUDA EP:
onnxruntime_providers_cuda.dll - QNN EP:
onnxruntime_providers_qnn.dll
- CUDA EP:
-
Bibliotecas de IHV (Fornecedor de Hardware Independente). Por exemplo:
- WebGPU: dependências do DirectX (
dxcompiler.dll,dxil.dll) - QNN: dependências do QNN da Qualcomm (
QnnSystem.dll, etc.)
- WebGPU: dependências do DirectX (
A tabela a seguir resume quais bibliotecas EP e IHV são agrupadas com seu aplicativo e o que o WinML baixará/instalará em runtime:
Em todas as plataformas e arquiteturas, o EP da CPU é necessário. As bibliotecas DE EP e IHV da WebGPU são pequenas de tamanho (por exemplo, WebGPU adiciona apenas ~7 MB ao pacote de aplicativos) e são necessárias no Windows e no macOS. No entanto, os EPs CUDA e QNN são grandes em tamanho (por exemplo, CUDA adiciona ~1 GB ao pacote de aplicativos), portanto, recomendamos excluir esses EPs do pacote de aplicativos. O WinML baixará/instalará CUDA e QNN em runtime se o usuário final tiver hardware compatível.
Observação
Estamos trabalhando para remover os EPs CUDA e QNN do pacote Microsoft.ML.OnnxRuntime.Foundry em versões futuras, para que você não precise incluir um arquivo ExcludeExtraLibs.props para removê-los do pacote do seu aplicativo.
Para reduzir o tamanho do pacote de aplicativos, você pode criar um ExcludeExtraLibs.props arquivo no diretório do projeto com o seguinte conteúdo, que exclui as bibliotecas CUDA e QNN EP e IHV ao publicar seu aplicativo:
<Project>
<!-- we want to ensure we're using the onnxruntime libraries from Foundry Local Core so
we delete the WindowsAppSdk versions once they're unzipped. -->
<Target Name="ExcludeOnnxRuntimeLibs" AfterTargets="ExtractMicrosoftWindowsAppSDKMsixFiles">
<Delete Files="$(MicrosoftWindowsAppSDKMsixContent)\onnxruntime.dll"/>
<Delete Files="$(MicrosoftWindowsAppSDKMsixContent)\onnxruntime_providers_shared.dll"/>
<Message Importance="Normal" Text="Deleted onnxruntime libraries from $(MicrosoftWindowsAppSDKMsixContent)." />
</Target>
<!-- Remove CUDA EP and IHV libraries on Windows x64 -->
<Target Name="ExcludeCudaLibs" Condition="'$(RuntimeIdentifier)'=='win-x64'" AfterTargets="ResolvePackageAssets">
<ItemGroup>
<!-- match onnxruntime*cuda.* (we're matching %(Filename) which excludes the extension) -->
<NativeCopyLocalItems Remove="@(NativeCopyLocalItems)"
Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('%(Filename)',
'^onnxruntime.*cuda.*', RegexOptions.IgnoreCase))" />
</ItemGroup>
<Message Importance="Normal" Text="Excluded onnxruntime CUDA libraries from package." />
</Target>
<!-- Remove QNN EP and IHV libraries on Windows arm64 -->
<Target Name="ExcludeQnnLibs" Condition="'$(RuntimeIdentifier)'=='win-arm64'" AfterTargets="ResolvePackageAssets">
<ItemGroup>
<NativeCopyLocalItems Remove="@(NativeCopyLocalItems)"
Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('%(Filename)%(Extension)',
'^QNN.*\.dll', RegexOptions.IgnoreCase))" />
<NativeCopyLocalItems Remove="@(NativeCopyLocalItems)"
Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('%(Filename)',
'^libQNNhtp.*', RegexOptions.IgnoreCase))" />
<NativeCopyLocalItems Remove="@(NativeCopyLocalItems)"
Condition="'%(FileName)%(Extension)' == 'onnxruntime_providers_qnn.dll'" />
</ItemGroup>
<Message Importance="Normal" Text="Excluded onnxruntime QNN libraries from package." />
</Target>
<!-- need to manually copy on linux-x64 due to the nuget packages not having the correct props file setup -->
<ItemGroup Condition="'$(RuntimeIdentifier)' == 'linux-x64'">
<!-- 'Update' as the Core package will add these dependencies, but we want to be explicit about the version -->
<PackageReference Update="Microsoft.ML.OnnxRuntime.Gpu" />
<PackageReference Update="Microsoft.ML.OnnxRuntimeGenAI.Cuda" />
<OrtNativeLibs Include="$(NuGetPackageRoot)microsoft.ml.onnxruntime.gpu.linux/$(OnnxRuntimeVersion)/runtimes/$(RuntimeIdentifier)/native/*" />
<OrtGenAINativeLibs Include="$(NuGetPackageRoot)microsoft.ml.onnxruntimegenai.cuda/$(OnnxRuntimeGenAIVersion)/runtimes/$(RuntimeIdentifier)/native/*" />
</ItemGroup>
<Target Name="CopyOrtNativeLibs" AfterTargets="Build" Condition=" '$(RuntimeIdentifier)' == 'linux-x64'">
<Copy SourceFiles="@(OrtNativeLibs)" DestinationFolder="$(OutputPath)"></Copy>
<Copy SourceFiles="@(OrtGenAINativeLibs)" DestinationFolder="$(OutputPath)"></Copy>
</Target>
</Project>
No arquivo de projeto (.csproj), adicione a seguinte linha para importar o ExcludeExtraLibs.props arquivo:
<!-- other project file content -->
<Import Project="ExcludeExtraLibs.props" />
Windows: as dependências do CUDA
O EP CUDA é integrado ao seu aplicativo Linux por meio de Microsoft.ML.OnnxRuntime.Foundry, mas não incluímos as bibliotecas IHV. Se você quiser permitir que os usuários finais com dispositivos habilitados para CUDA se beneficiem de um desempenho mais alto, você precisará adicionar as seguintes bibliotecas de IHV cuda ao seu aplicativo:
- CUBLAS v12.8.4 (download de NVIDIA Developer)
- cublas64_12.dll
- cublasLt64_12.dll
- CUDA RT v12.8.90 (faça o download de NVIDIA Developer)
- cudart64_12.dll
- CUDNN v9.8.0 (baixar do NVIDIA Developer)
- cudnn_graph64_9.dll
- cudnn_ops64_9.dll
- cudnn64_9.dll
- CUDA FFT v11.3.3.83 (faça o download no NVIDIA Developer)
- cufft64_11.dll
Aviso
Adicionar as bibliotecas CUDA EP e IHV ao aplicativo aumenta o tamanho do pacote de aplicativos em 1 GB.
Samples
- Para obter aplicativos de exemplo que demonstram como usar o SDK do C# Local do Foundry, consulte o repositório GitHub de Exemplos de SDK do C# Local do Foundry.
Referência de API
- Para obter mais detalhes sobre o SDK do C# Local do Foundry, leia a Referência da API do SDK do C# Local do Foundry.
Referência do SDK do Rust
O SDK do Rust para Foundry Local fornece uma maneira de gerenciar modelos, controlar o cache e interagir com o serviço Local do Foundry.
Pré-requisitos
- Instale o Foundry Local e verifique se o
foundrycomando está disponível em seuPATH. - Use o Rust 1.70.0 ou posterior.
Instalação
Para usar o SDK do Rust Local do Foundry, adicione o seguinte ao seu Cargo.toml:
[dependencies]
foundry-local = "0.1.0"
Como alternativa, você pode adicionar o crate Foundry Local usando cargo:
cargo add foundry-local
Início Rápido
Use este snippet para verificar se o SDK pode iniciar o serviço e ler o catálogo local.
use anyhow::Result;
use foundry_local::FoundryLocalManager;
#[tokio::main]
async fn main() -> Result<()> {
let mut manager = FoundryLocalManager::builder().bootstrap(true).build().await?;
let models = manager.list_catalog_models().await?;
println!("Catalog models available: {}", models.len());
Ok(())
}
Este exemplo imprime um número diferente de zero quando o serviço está em execução e o catálogo está disponível.
Referências:
FoundryLocalManager
Gerenciador de operações do SDK Local do Foundry.
Campos
-
service_uri: Option<String>— URI do serviço Foundry. -
client: Option<HttpClient>— cliente HTTP para solicitações de API. -
catalog_list: Option<Vec<FoundryModelInfo>>— Lista armazenada em cache de modelos de catálogo. -
catalog_dict: Option<HashMap<String, FoundryModelInfo>>— Dicionário armazenado em cache de modelos de catálogo. -
timeout: Option<u64>— Tempo limite opcional do cliente HTTP.
Métodos
pub fn builder() -> FoundryLocalManagerBuilder
Crie um construtor paraFoundryLocalManager.pub fn service_uri(&self) -> Result<&str>
Obtenha o URI do serviço.
Retorna: URI do serviço Fábrica.fn client(&self) -> Result<&HttpClient>
Obtenha a instância do cliente HTTP.
Retorna: cliente HTTP.pub fn endpoint(&self) -> Result<String>
Obtenha o ponto de extremidade do serviço.
Retorna: URL do ponto de extremidade.pub fn api_key(&self) -> String
Obtenha a chave de API para autenticação.
Retorna: chave de API.pub fn is_service_running(&mut self) -> bool
Verifique se o serviço está em execução e defina o URI do serviço se encontrado.
Retorna:truese estiver em execução, caso contrário,false.pub fn start_service(&mut self) -> Result<()>
Inicie o serviço Foundry Local.pub async fn list_catalog_models(&mut self) -> Result<&Vec<FoundryModelInfo>>
Obtenha uma lista de modelos disponíveis no catálogo.pub fn refresh_catalog(&mut self)
Atualize o cache do catálogo.pub async fn get_model_info(&mut self, alias_or_model_id: &str, raise_on_not_found: bool) -> Result<FoundryModelInfo>
Obtenha informações de modelo por alias ou ID.
Argumentos:-
alias_or_model_id: Alias ou ID do modelo. -
raise_on_not_found: se for true. Erro, se não for encontrado.
-
pub async fn get_cache_location(&self) -> Result<String>
Obtenha o local do cache como uma cadeia de caracteres.pub async fn list_cached_models(&mut self) -> Result<Vec<FoundryModelInfo>>
Listar modelos armazenados em cache.pub async fn download_model(&mut self, alias_or_model_id: &str, token: Option<&str>, force: bool) -> Result<FoundryModelInfo>
Baixe um modelo.
Argumentos:-
alias_or_model_id: Alias ou ID do modelo. -
token: token de autenticação opcional. -
force: force o download novamente se já estiver armazenado em cache.
-
pub async fn load_model(&mut self, alias_or_model_id: &str, ttl: Option<i32>) -> Result<FoundryModelInfo>
Carregue um modelo para inferência.
Argumentos:-
alias_or_model_id: Alias ou ID do modelo. -
ttl: tempo de vida útil opcional em segundos.
-
pub async fn unload_model(&mut self, alias_or_model_id: &str, force: bool) -> Result<()>
Descarregue um modelo.
Argumentos:-
alias_or_model_id: Alias ou ID do modelo. -
force: force o descarregamento mesmo se ele estiver em uso.
-
pub async fn list_loaded_models(&mut self) -> Result<Vec<FoundryModelInfo>>
Listar modelos carregados.
FoundryLocalManagerBuilder
Construtor para criar uma instância de FoundryLocalManager.
Campos
-
alias_or_model_id: Option<String>— Alias ou ID do modelo para baixar e carregar. -
bootstrap: bool— Se deve ou não iniciar o serviço caso não esteja em execução. -
timeout_secs: Option<u64>– Tempo limite do cliente HTTP em segundos.
Métodos
pub fn new() -> Self
Crie uma nova instância do builder.pub fn alias_or_model_id(mut self, alias_or_model_id: impl Into<String>) -> Self
Defina o alias ou a ID do modelo para baixar e carregar.pub fn bootstrap(mut self, bootstrap: bool) -> Self
Defina se o serviço será iniciado se não estiver em execução.pub fn timeout_secs(mut self, timeout_secs: u64) -> Self
Defina o tempo limite do cliente HTTP em segundos.pub async fn build(self) -> Result<FoundryLocalManager>
Compile a instância deFoundryLocalManager.
FoundryModelInfo
Representa informações sobre um modelo.
Campos
-
alias: String— O alias do modelo. -
id: String— A ID do modelo. -
version: String– A versão do modelo. -
runtime: ExecutionProvider— O provedor de execução (CPU, CUDA, etc.). -
uri: String— O URI do modelo. -
file_size_mb: i32— Tamanho do arquivo de modelo em MB. -
prompt_template: serde_json::Value– Modelo de solicitação para o modelo. -
provider: String— Nome do provedor. -
publisher: String– Nome do publicador. -
license: String— Tipo de licença. -
task: String— Tarefa de modelo (por exemplo, geração de texto).
Métodos
from_list_response(response: &FoundryListResponseModel) -> Self
Cria uma respostaFoundryModelInfocom base em um catálogo.to_download_body(&self) -> serde_json::Value
Converte as informações do modelo em um corpo JSON para solicitações de download.
ExecutionProvider
Enumeração para provedores de execução com suporte.
CPUWebGPUCUDAQNN
Métodos
get_alias(&self) -> String
Retorna um alias de cadeia de caracteres para o provedor de execução.
ModelRuntime
Descreve o ambiente de runtime de um modelo.
device_type: DeviceTypeexecution_provider: ExecutionProvider