Compartir a través de


Referencia del SDK local de Foundry

Importante

  • Foundry Local está disponible en versión preliminar. Las versiones preliminares públicas proporcionan acceso anticipado a las características que se encuentran en la implementación activa.
  • Las características, los enfoques y los procesos pueden cambiar o tener funcionalidades limitadas, antes de la disponibilidad general (GA).

El SDK local de Foundry simplifica la administración de modelos de IA en entornos locales al proporcionar operaciones del plano de control independientes del código de inferencia del plano de datos. Esta referencia documenta implementaciones del SDK para Python, JavaScript, C# y Rust.

Referencia del SDK de Python

Instalación

Instale el paquete de Python:

pip install foundry-local-sdk

Clase FoundryLocalManager

La FoundryLocalManager clase proporciona métodos para administrar modelos, caché y el servicio local Foundry.

Inicialización

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) Nombre alternativo o ID de modelo para descargar y cargar al inicio.
  • bootstrap: (valor predeterminado True) Si es True, inicia el servicio si no se ejecuta y carga el modelo si se proporciona.

Una nota sobre los alias

Muchos métodos descritos en esta referencia tienen un alias_or_model_id parámetro en la firma. Puede pasar al método un alias o un identificador de modelo como un valor. El uso de un alias hará lo siguiente:

  • Seleccione el mejor modelo para el hardware disponible. Por ejemplo, si hay disponible una GPU de Nvidia CUDA, Foundry Local selecciona el modelo CUDA. Si hay disponible una NPU compatible, Foundry Local selecciona el modelo de NPU.
  • Permite usar un nombre más corto sin necesidad de recordar el identificador del modelo.

Sugerencia

Se recomienda pasar al alias_or_model_id parámetro un alias porque al implementar la aplicación, Foundry Local adquiere el mejor modelo para el equipo del usuario final en tiempo de ejecución.

Nota:

Si tiene una NPU de Intel en Windows, asegúrese de que ha instalado el controlador NPU de Intel para obtener una aceleración de NPU óptima.

Administración de servicios

Método Firma Descripción
is_service_running() () -> bool Comprueba si el servicio Foundry Local se está ejecutando.
start_service() () -> None Inicia el servicio Foundry Local.
service_uri @property -> str Devuelve el URI del servicio.
endpoint @property -> str Devuelve el punto de conexión de servicio.
api_key @property -> str Devuelve la clave de API (de env o predeterminada).

Administración de catálogos

Método Firma Descripción
list_catalog_models() () -> list[ FoundryModelInfo] Enumera todos los modelos disponibles en el catálogo.
refresh_catalog() () -> None Actualiza el catálogo de modelos.
get_model_info() (alias_or_model_id: str, raise_on_not_found=False) -> FoundryModelInfo or None Obtiene la información del modelo por alias o identificador.

Administración de la memoria caché

Método Firma Descripción
get_cache_location() () -> str Devuelve la ruta de acceso del directorio de caché del modelo.
list_cached_models() () -> list[ FoundryModelInfo] Enumera los modelos descargados en la caché local.

Administración de modelos

Método Firma Descripción
download_model() (alias_or_model_id: str, token: str = None, force: bool = False) -> FoundryModelInfo] Descarga un modelo en la memoria caché local.
load_model() (alias_or_model_id: str, ttl: int = 600) -> FoundryModelInfo] Carga un modelo en el servidor de inferencia.
unload_model() (alias_or_model_id: str, force: bool = False) -> None Descarga un modelo del servidor de inferencia.
list_loaded_models() () -> list[ FoundryModelInfo] Enumera todos los modelos cargados actualmente en el servicio.

FoundryModelInfo

Los métodoslist_catalog_models(), list_cached_models()y list_loaded_models() devuelven una lista de FoundryModelInfo objetos. Puede usar la información contenida en este objeto para refinar aún más la lista. O bien, obtenga la información de un modelo directamente llamando al get_model_info(alias_or_model_id) método .

Estos objetos contienen los siguientes campos:

Campo Tipo Descripción
alias str Alias del modelo
id str Identificador único del modelo
version str Versión del modelo
execution_provider str Acelerador (proveedor de ejecución) usado para ejecutar el modelo.
device_type DeviceType Tipo de dispositivo del modelo: CPU, GPU, NPU
uri str URI del modelo
file_size_mb int Tamaño del modelo en disco en MB
supports_tool_calling bool Si el modelo admite llamadas a herramientas
prompt_template dict \| None Plantilla de consulta para el modelo
provider str Proveedor del modelo en el que se publica el modelo
publisher str Publicador del modelo, es decir, quien publicó el modelo
license str Nombre de la licencia del modelo
task str Tarea del modelo. Algunos de los tipos de finalización de chat, reconocimiento automático de voz
ep_override str \| None Reemplazo del proveedor de ejecución, si es distinto del valor predeterminado del modelo

Proveedores de ejecución

Uno de los valores siguientes:

  • CPUExecutionProvider - Ejecución basada en CPU
  • CUDAExecutionProvider - Ejecución de GPU de NVIDIA CUDA
  • WebGpuExecutionProvider - Ejecución de WebGPU
  • QNNExecutionProvider - Ejecución de red neuronal de Qualcomm (NPU)
  • OpenVINOExecutionProvider - Ejecución de Intel OpenVINO
  • NvTensorRTRTXExecutionProvider - Ejecución de NVIDIA TensorRT
  • VitisAIExecutionProvider - Ejecución de la inteligencia artificial de Vitis de AMD

Ejemplo de uso

En el código siguiente se muestra cómo usar la FoundryManager clase para administrar modelos e interactuar con el servicio local 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)

Integración con el SDK de OpenAI

Instale el paquete OpenAI:

pip install openai

En el código siguiente se muestra cómo integrar con FoundryLocalManager el SDK de OpenAI para interactuar con un 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 us es 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)

Referencia del SDK de JavaScript

Instalación

Instale el paquete desde npm:

npm install foundry-local-sdk

Clase FoundryLocalManager

La FoundryLocalManager clase le permite administrar modelos, controlar la memoria caché e interactuar con el servicio local Foundry en entornos de explorador y Node.js.

Inicialización

import { FoundryLocalManager } from "foundry-local-sdk";

const foundryLocalManager = new FoundryLocalManager();

Opciones disponibles:

  • serviceUrl: dirección URL base del servicio local Foundry
  • fetch: (opcional) Implementación de captura personalizada para entornos como Node.js

Una nota sobre los alias

Muchos métodos descritos en esta referencia tienen un aliasOrModelId parámetro en la firma. Puede pasar al método un alias o un identificador de modelo como un valor. El uso de un alias hará lo siguiente:

  • Seleccione el mejor modelo para el hardware disponible. Por ejemplo, si hay disponible una GPU de Nvidia CUDA, Foundry Local selecciona el modelo CUDA. Si hay disponible una NPU compatible, Foundry Local selecciona el modelo de NPU.
  • Permite usar un nombre más corto sin necesidad de recordar el identificador del modelo.

Sugerencia

Se recomienda pasar al aliasOrModelId parámetro un alias porque al implementar la aplicación, Foundry Local adquiere el mejor modelo para el equipo del usuario final en tiempo de ejecución.

Nota:

Si tiene una NPU de Intel en Windows, asegúrese de que ha instalado el controlador NPU de Intel para obtener una aceleración de NPU óptima.

Administración de servicios

Método Firma Descripción
init() (aliasOrModelId?: string) => Promise<void> Inicializa el SDK y, opcionalmente, carga un modelo.
isServiceRunning() () => Promise<boolean> Comprueba si el servicio Foundry Local se está ejecutando.
startService() () => Promise<void> Inicia el servicio Foundry Local.
serviceUrl string Dirección URL base del servicio local Foundry.
endpoint string El punto de conexión de API (serviceUrl + /v1).
apiKey string La clave de API (ninguna).

Administración de catálogos

Método Firma Descripción
listCatalogModels() () => Promise<FoundryModelInfo[]> Enumera todos los modelos disponibles en el catálogo.
refreshCatalog() () => Promise<void> Actualiza el catálogo de modelos.
getModelInfo() (aliasOrModelId: string, throwOnNotFound = false) => Promise<FoundryModelInfo \| null> Obtiene la información del modelo por alias o identificador.

Administración de la memoria caché

Método Firma Descripción
getCacheLocation() () => Promise<string> Devuelve la ruta de acceso del directorio de caché del modelo.
listCachedModels() () => Promise<FoundryModelInfo[]> Enumera los modelos descargados en la caché local.

Administración de modelos

Método Firma Descripción
downloadModel() (aliasOrModelId: string, token?: string, force = false, onProgress?) => Promise<FoundryModelInfo> Descarga un modelo en la memoria caché local.
loadModel() (aliasOrModelId: string, ttl = 600) => Promise<FoundryModelInfo> Carga un modelo en el servidor de inferencia.
unloadModel() (aliasOrModelId: string, force = false) => Promise<void> Descarga un modelo del servidor de inferencia.
listLoadedModels() () => Promise<FoundryModelInfo[]> Enumera todos los modelos cargados actualmente en el servicio.

Ejemplo de uso

En el código siguiente se muestra cómo usar la FoundryLocalManager clase para administrar modelos e interactuar con el servicio local 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);

Integración con el cliente de OpenAI

Instale el paquete OpenAI:

npm install openai

El siguiente código demuestra cómo integrar el FoundryLocalManager con el cliente de OpenAI para interactuar con un 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();

Uso del explorador

El SDK incluye una versión compatible con el explorador donde debe especificar manualmente la dirección URL del servicio:

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 endpoint = "ENDPOINT";

const manager = new FoundryLocalManager({ serviceUrl: endpoint });

// Note: The `init`, `isServiceRunning`, and `startService` methods
// are not available in the browser version

Nota:

La versión del explorador no admite los initmétodos , isServiceRunningy startService . Debe asegurarse de que el servicio local Foundry se está ejecutando antes de usar el SDK en un entorno de navegador. Puede iniciar el servicio mediante la CLI local de Foundry: foundry service start. Puede obtener la dirección URL del servicio desde la salida de la CLI.

Ejemplo 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 endpoint = "ENDPOINT";

const manager = new FoundryLocalManager({ serviceUrl: endpoint });

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.listLocalModels();
console.log("Cached models:", catalog);

// 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);

Referencia del SDK de C#

Rediseño

Para mejorar la capacidad de enviar aplicaciones mediante inteligencia artificial en el dispositivo, hay cambios sustanciales en la arquitectura del SDK de C# en la versión 0.8.0 y versiones posteriores. En esta sección, se describen los cambios clave que le ayudarán a migrar las aplicaciones a la versión más reciente del SDK.

Nota:

En la versión 0.8.0 del SDK y versiones posteriores, hay cambios importantes en la API de versiones anteriores.

Cambios en la arquitectura

En el diagrama siguiente se muestra cómo la arquitectura anterior , para versiones anteriores a 0.8.0 , se basaba en gran medida en el uso de un servidor web REST para administrar modelos e inferencias como finalizaciones de chat:

Diagrama de la arquitectura anterior para Foundry Local.

El SDK usaría una llamada de procedimiento remota (RPC) para buscar el ejecutable de la CLI local de Foundry en la máquina, iniciar el servidor web y, a continuación, comunicarse con él a través de HTTP. Esta arquitectura tenía varias limitaciones, entre las que se incluyen:

  • Complejidad en la administración del ciclo de vida del servidor web.
  • Implementación complicada: los usuarios finales necesitaban tener instalada la CLI local de Foundry en sus máquinas y la aplicación.
  • La administración de versiones de la CLI y el SDK podrían provocar problemas de compatibilidad.

Para solucionar estos problemas, la arquitectura rediseñada en la versión 0.8.0 y versiones posteriores usa un enfoque más simplificado. La nueva arquitectura es la siguiente:

Diagrama de la nueva arquitectura para Foundry Local.

En esta nueva arquitectura:

  • La aplicación es independiente. No requiere que la CLI local de Foundry se instale por separado en la máquina del usuario final, lo que facilita la implementación de aplicaciones.
  • El servidor web REST es opcional. Todavía puede usar el servidor web si desea integrar con otras herramientas que se comunican a través de HTTP. Lea Uso de finalizaciones de chat a través del servidor REST con Foundry Local para obtener más información sobre cómo usar esta característica.
  • El SDK tiene compatibilidad nativa con finalizaciones de chat y transcripciones de audio, lo que le permite crear aplicaciones de inteligencia artificial conversacional con menos dependencias. Lea Use Foundry Local native chat completions API (Uso de la API de finalizaciones de chat nativo local de Foundry ) para obtener más información sobre cómo usar esta característica.
  • En dispositivos Windows, puedes utilizar una compilación de Windows ML que gestiona la aceleración de hardware para modelos en el dispositivo mediante la integración del entorno de ejecución y los controladores adecuados.

Cambios de API

La versión 0.8.0 y versiones posteriores proporcionan una API más orientada a objetos y que se pueden componer. El punto de entrada principal sigue siendo la FoundryLocalManager clase , pero en lugar de ser un conjunto plano de métodos que funcionan a través de llamadas estáticas a una API HTTP sin estado, el SDK ahora expone métodos en la FoundryLocalManager instancia que mantienen el estado sobre el servicio y los modelos.

Primitivo Versiones < 0.8.0 Versiones >= 0.8.0
Configuración N/A config = Configuration(...)
Obtener administrador mgr = FoundryLocalManager(); await FoundryLocalManager.CreateAsync(config, logger);
var mgr = FoundryLocalManager.Instance;
Obtener catálogo N/A catalog = await mgr.GetCatalogAsync();
Enumerar modelos mgr.ListCatalogModelsAsync(); catalog.ListModelsAsync();
Obtener modelo mgr.GetModelInfoAsync("aliasOrModelId"); catalog.GetModelAsync(alias: "alias");
Obtener variante N/A model.SelectedVariant;
Establecer variante N/A model.SelectVariant();
Descarga de un modelo mgr.DownloadModelAsync("aliasOrModelId"); model.DownloadAsync()
Carga de un modelo mgr.LoadModelAsync("aliasOrModelId"); model.LoadAsync()
Descargar un modelo mgr.UnloadModelAsync("aliasOrModelId"); model.UnloadAsync()
Enumerar modelos cargados mgr.ListLoadedModelsAsync(); catalog.GetLoadedModelsAsync();
Obtener ruta de acceso del modelo N/A model.GetPathAsync()
Iniciar servicio mgr.StartServiceAsync(); mgr.StartWebServerAsync();
Detener servicio mgr.StopServiceAsync(); mgr.StopWebServerAsync();
Ubicación de caché mgr.GetCacheLocationAsync(); config.ModelCacheDir
Enumerar modelos almacenados en caché mgr.ListCachedModelsAsync(); catalog.GetCachedModelsAsync();

La API permite que Foundry Local sea más configurable a través del servidor web, el registro, la ubicación de caché y la selección de variantes del modelo. Por ejemplo, la Configuration clase permite configurar el nombre de la aplicación, el nivel de registro, las direcciones URL del servidor web y los directorios para los datos de la aplicación, la caché del modelo y los registros:

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

En la versión anterior del SDK de C# local de Foundry, no se pudieron configurar estas opciones directamente a través del SDK, lo que limitaba la capacidad de personalizar el comportamiento del servicio.

Guía de configuración del proyecto

Hay dos paquetes NuGet para el SDK local de Foundry( WinML y un paquete multiplataforma) que tienen la misma superficie de API , pero están optimizadas para distintas plataformas:

  • Windows: usa el Microsoft.AI.Foundry.Local.WinML paquete específico de las aplicaciones de Windows, que usa el marco de Windows Machine Learning (WinML) para ofrecer un rendimiento óptimo y una experiencia de usuario en dispositivos Windows.
  • Multiplataforma: use el paquete Microsoft.AI.Foundry.Local que se puede usar para aplicaciones multiplataforma (Windows, Linux, macOS).

En función de la plataforma de destino, siga estas instrucciones para crear una nueva aplicación de C# y agregar las dependencias necesarias:

Use Foundry Local en el proyecto de C# siguiendo estas instrucciones específicas de Windows o multiplataforma (macOS/Linux/Windows):

  1. Cree un nuevo proyecto de C# y vaya a él:
    dotnet new console -n app-name
    cd app-name
    
  2. Abra y edite el app-name.csproj archivo en:
    <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>
    
  3. Cree un nuget.config archivo en la raíz del proyecto con el siguiente contenido para que los paquetes se restauren correctamente:
    <?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>
    

Reducir el tamaño del paquete de aplicación

El SDK local de Foundry incorpora el paquete NuGet como dependencia. El Microsoft.ML.OnnxRuntime.Foundry paquete proporciona el paquete de tiempo de ejecución para la inferencia, que es el conjunto de bibliotecas necesarias para ejecutar de forma eficaz la inferencia en dispositivos de hardware de proveedores específicos. El conjunto de tiempo de ejecución de inferencia incluye los siguientes componentes:

  • Biblioteca en tiempo de ejecución de ONNX: el motor de inferencia principal (onnxruntime.dll).
  • Biblioteca del proveedor de ejecución en tiempo de ejecución (EP) de ONNX. Un back-end específico de hardware en el entorno de ejecución de ONNX que optimiza y ejecuta partes de un modelo de aprendizaje automático y un acelerador de hardware. Por ejemplo:
    • CUDA EP: onnxruntime_providers_cuda.dll
    • QNN EP: onnxruntime_providers_qnn.dll
  • Bibliotecas independientes del proveedor de hardware (IHV). Por ejemplo:
    • WebGPU: dependencias de DirectX (dxcompiler.dll, dxil.dll)
    • QNN: dependencias de Qualcomm QNN (QnnSystem.dll, etc.)

En la tabla siguiente se resumen las bibliotecas EP e IHV que se incluyen con la aplicación y qué winML descargará o instalará en tiempo de ejecución:

Ilustración de una tabla que muestra las bibliotecas EP e IHV.

En toda plataforma o arquitectura, se requiere la EPU del CPU. Las bibliotecas WEBGPU EP e IHV tienen un tamaño pequeño (por ejemplo, WebGPU solo agrega ~7 MB al paquete de aplicación) y son necesarias en Windows y macOS. Sin embargo, los EP de CUDA y QNN tienen un tamaño grande (por ejemplo, CUDA agrega ~1 GB al paquete de aplicación), por lo que se recomienda excluir estos EP del paquete de aplicación. WinML descargará o instalará CUDA y QNN en tiempo de ejecución si el usuario final tiene hardware compatible.

Nota:

Estamos trabajando para quitar los EP de CUDA y QNN del paquete Microsoft.ML.OnnxRuntime.Foundry en futuras versiones para que no necesite incluir un archivo ExcludeExtraLibs.props para quitarlos del paquete de aplicación.

Para reducir el tamaño del paquete de aplicación, puede crear un ExcludeExtraLibs.props archivo en el directorio del proyecto con el siguiente contenido, que excluye las bibliotecas CUDA y QNN EP e IHV al publicar la aplicación:

<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>

En el archivo de proyecto (.csproj), agregue la siguiente línea para importar el ExcludeExtraLibs.props archivo:

<!-- other project file content -->
  
<Import Project="ExcludeExtraLibs.props" />

Linux: dependencias de CUDA

CUDA EP se integra en tu aplicación Linux a través de Microsoft.ML.OnnxRuntime.Foundry, pero no se incluyen las bibliotecas de IHV. Si quiere permitir que los usuarios finales con dispositivos habilitados para CUDA se beneficien del rendimiento superior, debe agregar las siguientes bibliotecas de IHV de CUDA a la aplicación:

Advertencia

Agregar las bibliotecas CUDA EP e IHV a la aplicación aumentan el tamaño del paquete de aplicación en 1 GB.

Samples

Referencia de API

Referencia del SDK de Rust

El SDK de Rust para Foundry Local proporciona una manera de administrar modelos, controlar la memoria caché e interactuar con el servicio local foundry.

Instalación

Para usar el SDK de Foundry Local Rust, agregue lo siguiente a Cargo.toml:

[dependencies]
foundry-local-sdk = "0.1"

Como alternativa, puede agregar la caja local de Foundry mediante cargo:

cargo add foundry-local

FoundryLocalManager

Administrador para las operaciones del SDK local de Foundry.

Campos

  • service_uri: Option<String> — URI del servicio Foundry.
  • client: Option<HttpClient> : cliente HTTP para solicitudes de API.
  • catalog_list: Option<Vec<FoundryModelInfo>> : lista almacenada en caché de modelos de catálogo.
  • catalog_dict: Option<HashMap<String, FoundryModelInfo>> : diccionario almacenado en caché de modelos de catálogo.
  • timeout: Option<u64> : tiempo de espera del cliente HTTP opcional.

Métodos

  • pub fn builder() -> FoundryLocalManagerBuilder
    Crear un nuevo constructor para FoundryLocalManager.

  • pub fn service_uri(&self) -> Result<&str>
    Obtenga el URI del servicio.
    Devuelve: URI del servicio Foundry.

  • fn client(&self) -> Result<&HttpClient>
    Obtenga la instancia de cliente HTTP.
    Devuelve: cliente HTTP.

  • pub fn endpoint(&self) -> Result<String>
    Obtenga el punto de conexión del servicio.
    Devuelve: dirección URL del punto de conexión.

  • pub fn api_key(&self) -> String
    Obtenga la clave de API para la autenticación.
    Devuelve: clave de API.

  • pub fn is_service_running(&mut self) -> bool
    Compruebe si el servicio se está ejecutando y establezca el URI del servicio si se encuentra.
    Devuelve:true si se ejecuta, false de lo contrario.

  • pub fn start_service(&mut self) -> Result<()>
    Inicie el servicio local Foundry.

  • pub async fn list_catalog_models(&mut self) -> Result<&Vec<FoundryModelInfo>>
    Obtenga una lista de los modelos disponibles en el catálogo.

  • pub fn refresh_catalog(&mut self)
    Actualice la memoria caché del catálogo.

  • pub async fn get_model_info(&mut self, alias_or_model_id: &str, raise_on_not_found: bool) -> Result<FoundryModelInfo>
    Obtener información del modelo por alias o identificador.
    Argumentos:

    • alias_or_model_id: alias o id. de modelo.
    • raise_on_not_found: si es true, error si no se encuentra.
  • pub async fn get_cache_location(&self) -> Result<String>
    Obtiene la ubicación de la memoria caché como una cadena.

  • pub async fn list_cached_models(&mut self) -> Result<Vec<FoundryModelInfo>>
    Enumerar modelos almacenados en caché.

  • pub async fn download_model(&mut self, alias_or_model_id: &str, token: Option<&str>, force: bool) -> Result<FoundryModelInfo>
    Descargue un modelo.
    Argumentos:

    • alias_or_model_id: alias o id. de modelo.
    • token: token de autenticación opcional.
    • force: forzar la nueva descarga si ya está almacenado en caché.
  • pub async fn load_model(&mut self, alias_or_model_id: &str, ttl: Option<i32>) -> Result<FoundryModelInfo>
    Cargue un modelo para la inferencia.
    Argumentos:

    • alias_or_model_id: alias o id. de modelo.
    • ttl: Tiempo de vida opcional en segundos.
  • pub async fn unload_model(&mut self, alias_or_model_id: &str, force: bool) -> Result<()>
    Descargue un modelo.
    Argumentos:

    • alias_or_model_id: alias o id. de modelo.
    • force: forzar la descarga incluso si está en uso.
  • pub async fn list_loaded_models(&mut self) -> Result<Vec<FoundryModelInfo>>
    Enumerar modelos cargados.

FoundryLocalManagerBuilder

Generador para crear una FoundryLocalManager instancia.

Campos

  • alias_or_model_id: Option<String> : alias o identificador de modelo para descargar y cargar.
  • bootstrap: bool : indica si se debe iniciar el servicio si no se está ejecutando.
  • timeout_secs: Option<u64> : tiempo de espera del cliente HTTP en segundos.

Métodos

  • pub fn new() -> Self
    Cree una nueva instancia del constructor.

  • pub fn alias_or_model_id(mut self, alias_or_model_id: impl Into<String>) -> Self
    Establezca el alias o el identificador de modelo para descargar y cargar.

  • pub fn bootstrap(mut self, bootstrap: bool) -> Self
    Establezca si se va a iniciar el servicio si no se está ejecutando.

  • pub fn timeout_secs(mut self, timeout_secs: u64) -> Self
    Establezca el tiempo de espera del cliente HTTP en segundos.

  • pub async fn build(self) -> Result<FoundryLocalManager>
    Cree la instancia FoundryLocalManager.

FoundryModelInfo

Representa información sobre un modelo.

Campos

  • alias: String : alias del modelo.
  • id: String : identificador del modelo.
  • version: String La versión del modelo.
  • runtime: ExecutionProvider — El proveedor de ejecución (CPU, CUDA, etc.).
  • uri: String : el URI del modelo.
  • file_size_mb: i32 — Tamaño del archivo de modelo en MB.
  • prompt_template: serde_json::Value : solicitud de plantilla para el modelo.
  • provider: String : nombre del proveedor.
  • publisher: String : nombre del publicador.
  • license: String — Tipo de licencia.
  • task: String — Tarea Modelo (por ejemplo, generación de texto).

Métodos

  • from_list_response(response: &FoundryListResponseModel) -> Self
    Crea un objeto FoundryModelInfo a partir de una respuesta de catálogo.

  • to_download_body(&self) -> serde_json::Value
    Convierte la información del modelo en un cuerpo JSON para las solicitudes de descarga.

ExecutionProvider

Enumeración para proveedores de ejecución admitidos.

  • CPU
  • WebGPU
  • CUDA
  • QNN
Métodos
  • get_alias(&self) -> String
    Devuelve un alias de cadena para el proveedor de ejecución.

ModelRuntime

Describe el entorno en tiempo de ejecución de un modelo.

  • device_type: DeviceType
  • execution_provider: ExecutionProvider