중요합니다
- Foundry Local은 미리 보기로 제공됩니다. 공개 미리 보기 릴리스에서는 현재 적극적으로 배포되고 있는 기능에 대한 조기 액세스를 제공합니다.
- GA(일반 공급) 전에는 기능, 방식 및 프로세스가 변경되거나 기능이 제한될 수 있습니다.
Foundry 로컬 SDK는 데이터 평면 유추 코드와 별도로 제어 평면 작업을 제공하여 로컬 환경에서 AI 모델 관리를 간소화합니다. 이 참조는 Python, JavaScript, C#및 Rust에 대한 SDK 구현을 설명합니다.
Python SDK 참조
필수 조건
-
foundry명령어가PATH에서 사용 가능한지 확인한 후, Foundry Local을 설치합니다. - Python 3.9 이상을 사용합니다.
설치
Python 패키지를 설치합니다.
pip install foundry-local-sdk
빠른 시작
이 코드 조각을 사용하여 SDK가 서비스를 시작하고 로컬 카탈로그에 연결할 수 있는지 확인합니다.
from foundry_local import FoundryLocalManager
manager = FoundryLocalManager()
manager.start_service()
catalog = manager.list_catalog_models()
print(f"Catalog models available: {len(catalog)}")
다음은 서비스가 실행 중이고 카탈로그를 사용할 수 있을 때 0이 아닌 숫자를 인쇄하는 예제입니다.
참조:
FoundryLocalManager 클래스
클래스는 FoundryLocalManager 모델, 캐시 및 Foundry 로컬 서비스를 관리하는 메서드를 제공합니다.
초기화
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: (선택 사항) 시작 시 다운로드 및 로드할 별칭 또는 모델 ID입니다. -
bootstrap: (기본 True) True이면 실행되지 않는 경우 서비스를 시작하고 제공된 경우 모델을 로드합니다.
별칭에 대한 메모
이 참조에 설명된 많은 메서드에는 서명에 alias_or_model_id 매개 변수가 있습니다.
메서드에 별칭 또는 모델 ID를 값으로 전달할 수 있습니다. 별칭을 사용하면 다음이 수행됩니다.
- 사용 가능한 하드웨어에 가장 적합한 모델을 선택합니다. 예를 들어 Nvidia CUDA GPU를 사용할 수 있는 경우 Foundry Local은 CUDA 모델을 선택합니다. 지원되는 NPU를 사용할 수 있는 경우 Foundry Local은 NPU 모델을 선택합니다.
- 모델 ID를 기억할 필요 없이 더 짧은 이름을 사용할 수 있습니다.
팁 (조언)
애플리케이션을 alias_or_model_id 배포할 때 Foundry Local은 런타임에 최종 사용자의 컴퓨터에 가장 적합한 모델을 획득하므로 매개 변수에 별칭 을 전달하는 것이 좋습니다.
비고
Windows에 Intel NPU가 있는 경우 최적의 NPU 가속을 위해 Intel NPU 드라이버를 설치했는지 확인합니다.
서비스 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
is_service_running() |
() -> bool |
Foundry 로컬 서비스가 실행 중인지 확인합니다. |
start_service() |
() -> None |
Foundry 로컬 서비스를 시작합니다. |
service_uri |
@property -> str |
서비스 URI를 반환합니다. |
endpoint |
@property -> str |
서비스 엔드포인트를 반환합니다. |
api_key |
@property -> str |
API 키를 반환합니다(env 또는 기본값에서). |
카탈로그 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
list_catalog_models() |
() -> list[FoundryModelInfo] |
카탈로그에서 사용 가능한 모든 모델을 나열합니다. |
refresh_catalog() |
() -> None |
모델 카탈로그를 새로 고칩니다. |
get_model_info() |
(alias_or_model_id: str, raise_on_not_found=False) -> FoundryModelInfo \| None |
별칭 또는 ID로 모델 정보를 가져옵니다. |
캐시 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
get_cache_location() |
() -> str |
모델 캐시 디렉터리 경로를 반환합니다. |
list_cached_models() |
() -> list[FoundryModelInfo] |
로컬 캐시에 다운로드된 모델을 나열합니다. |
모델 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
download_model() |
(alias_or_model_id: str, token: str = None, force: bool = False) -> FoundryModelInfo |
로컬 캐시에 모델을 다운로드합니다. |
load_model() |
(alias_or_model_id: str, ttl: int = 600) -> FoundryModelInfo |
모델을 유추 서버에 로드합니다. |
unload_model() |
(alias_or_model_id: str, force: bool = False) -> None |
유추 서버에서 모델을 언로드합니다. |
list_loaded_models() |
() -> list[FoundryModelInfo] |
현재 서비스에 로드된 모든 모델을 나열합니다. |
FoundryModelInfo
메서드 list_catalog_models(), list_cached_models(), 및 list_loaded_models()는 FoundryModelInfo 객체의 목록을 반환합니다. 이 개체에 포함된 정보를 사용하여 목록을 더 구체화할 수 있습니다. 또는 메서드를 호출하여 모델에 대한 정보를 직접 가져옵니다 get_model_info(alias_or_model_id) .
이러한 개체에는 다음 필드가 포함됩니다.
| 분야 | 유형 | 설명 |
|---|---|---|
alias |
str |
모델의 별칭입니다. |
id |
str |
모델의 고유 식별자입니다. |
version |
str |
모델의 버전입니다. |
execution_provider |
str |
모델을 실행하는 데 사용되는 가속기(실행 공급자)입니다. |
device_type |
DeviceType |
모델의 디바이스 유형: CPU, GPU, NPU. |
uri |
str |
모델의 URI입니다. |
file_size_mb |
int |
디스크의 모델 크기(MB)입니다. |
supports_tool_calling |
bool |
모델에서 도구 호출을 지원하는지 여부입니다. |
prompt_template |
dict \| None |
모델에 대한 프롬프트 템플릿입니다. |
provider |
str |
모델 공급자(모델이 게시되는 위치)입니다. |
publisher |
str |
모델의 게시자(모델을 게시한 사람)입니다. |
license |
str |
모델 라이선스의 이름입니다. |
task |
str |
모델의 작업입니다.
chat-completions 또는 automatic-speech-recognition중 하나입니다. |
ep_override |
str \| None |
모델의 기본값과 다른 경우 실행 공급자에 대해 재정의합니다. |
실행 공급자
다음 중 하나입니다.
-
CPUExecutionProvider- CPU 기반 실행 -
CUDAExecutionProvider- NVIDIA CUDA GPU 실행 -
WebGpuExecutionProvider- WebGPU 실행 -
QNNExecutionProvider- Qualcomm 신경망 실행(NPU) -
OpenVINOExecutionProvider- Intel OpenVINO 실행 -
NvTensorRTRTXExecutionProvider- NVIDIA TensorRT 실행 -
VitisAIExecutionProvider- AMD Vitis AI 실행
사용 예시
다음 코드에서는 클래스를 사용하여 FoundryLocalManager 모델을 관리하고 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)
이 예제에서는 모델을 나열하고, 하나의 모델을 다운로드하고 로드한 다음, 언로드합니다.
참조:
OpenAI SDK와 통합
OpenAI 패키지를 설치합니다.
pip install openai
다음 코드에서는 OpenAI SDK와 통합 FoundryLocalManager 하여 로컬 모델과 상호 작용하는 방법을 보여 줍니다.
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)
이 예제에서는 로컬 모델에서 채팅 완료 응답을 스트리밍합니다.
참조:
JavaScript SDK 참조
필수 조건
- Foundry Local을 설치하고
foundry명령이PATH에서 사용할 수 있는지 확인합니다.
설치
npm에서 패키지를 설치합니다.
npm install foundry-local-sdk
빠른 시작
이 코드 조각을 사용하여 SDK가 서비스를 시작하고 로컬 카탈로그에 연결할 수 있는지 확인합니다.
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}`);
다음은 서비스가 실행 중이고 카탈로그를 사용할 수 있을 때 0이 아닌 숫자를 인쇄하는 예제입니다.
참조:
FoundryLocalManager 클래스
이 FoundryLocalManager 클래스를 사용하면 브라우저 및 Node.js 환경에서 모델을 관리하고, 캐시를 제어하고, Foundry 로컬 서비스와 상호 작용할 수 있습니다.
초기화
import { FoundryLocalManager } from "foundry-local-sdk";
const foundryLocalManager = new FoundryLocalManager();
사용 가능한 옵션:
-
host: Foundry 로컬 서비스의 기본 URL -
fetch: (선택 사항) Node.js 같은 환경에 대한 사용자 지정 페치 구현
별칭에 대한 메모
이 참조에 설명된 많은 메서드에는 서명에 aliasOrModelId 매개 변수가 있습니다.
메서드에 별칭 또는 모델 ID를 값으로 전달할 수 있습니다. 별칭을 사용하면 다음이 수행됩니다.
- 사용 가능한 하드웨어에 가장 적합한 모델을 선택합니다. 예를 들어 Nvidia CUDA GPU를 사용할 수 있는 경우 Foundry Local은 CUDA 모델을 선택합니다. 지원되는 NPU를 사용할 수 있는 경우 Foundry Local은 NPU 모델을 선택합니다.
- 모델 ID를 기억할 필요 없이 더 짧은 이름을 사용할 수 있습니다.
팁 (조언)
애플리케이션을 aliasOrModelId 배포할 때 Foundry Local은 런타임에 최종 사용자의 컴퓨터에 가장 적합한 모델을 획득하므로 매개 변수에 별칭 을 전달하는 것이 좋습니다.
비고
Windows에 Intel NPU가 있는 경우 최적의 NPU 가속을 위해 Intel NPU 드라이버를 설치했는지 확인합니다.
서비스 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
init() |
(aliasOrModelId?: string) => Promise<FoundryModelInfo \| void> |
SDK를 초기화하고 필요에 따라 모델을 로드합니다. |
isServiceRunning() |
() => Promise<boolean> |
Foundry 로컬 서비스가 실행 중인지 확인합니다. |
startService() |
() => Promise<void> |
Foundry 로컬 서비스를 시작합니다. |
serviceUrl |
string |
Foundry 로컬 서비스의 기본 URL입니다. |
endpoint |
string |
API 엔드포인트(serviceUrl + /v1)입니다. |
apiKey |
string |
API 키(없음)입니다. |
카탈로그 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
listCatalogModels() |
() => Promise<FoundryModelInfo[]> |
카탈로그에서 사용 가능한 모든 모델을 나열합니다. |
refreshCatalog() |
() => Promise<void> |
모델 카탈로그를 새로 고칩니다. |
getModelInfo() |
(aliasOrModelId: string, throwOnNotFound = false) => Promise<FoundryModelInfo \| null> |
별칭 또는 ID로 모델 정보를 가져옵니다. |
캐시 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
getCacheLocation() |
() => Promise<string> |
모델 캐시 디렉터리 경로를 반환합니다. |
listCachedModels() |
() => Promise<FoundryModelInfo[]> |
로컬 캐시에 다운로드된 모델을 나열합니다. |
모델 관리
| 메서드 | 서명 | 설명 |
|---|---|---|
downloadModel() |
(aliasOrModelId: string, token?: string, force = false, onProgress?) => Promise<FoundryModelInfo> |
로컬 캐시에 모델을 다운로드합니다. |
loadModel() |
(aliasOrModelId: string, ttl = 600) => Promise<FoundryModelInfo> |
모델을 유추 서버에 로드합니다. |
unloadModel() |
(aliasOrModelId: string, force = false) => Promise<void> |
유추 서버에서 모델을 언로드합니다. |
listLoadedModels() |
() => Promise<FoundryModelInfo[]> |
현재 서비스에 로드된 모든 모델을 나열합니다. |
사용 예시
다음 코드에서는 클래스를 사용하여 FoundryLocalManager 모델을 관리하고 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);
이 예제에서는 모델을 다운로드하고 로드한 다음 캐시된 모델과 로드된 모델을 나열합니다.
참조:
OpenAI 클라이언트와 통합
OpenAI 패키지를 설치합니다.
npm install openai
다음 코드는 OpenAI 클라이언트에 FoundryLocalManager을 통합하여 로컬 모델과 상호 작용하는 방법을 보여줍니다.
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();
이 예제에서는 로컬 모델에서 채팅 완료 응답을 스트리밍합니다.
참조:
브라우저 사용량
SDK에는 호스트 URL을 수동으로 지정해야 하는 브라우저 호환 버전이 포함되어 있습니다.
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
비고
브라우저 버전은 init, isServiceRunning, 및 startService 메서드를 지원하지 않습니다. 브라우저 환경에서 SDK를 사용하기 전에 Foundry 로컬 서비스가 실행 중인지 확인해야 합니다. Foundry 로컬 CLI foundry service start를 사용하여 서비스를 시작할 수 있습니다. CLI 출력에서 서비스 URL을 수집할 수 있습니다.
사용 예시
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);
참조:
C# SDK 참조
프로젝트 설정 가이드
Foundry 로컬 SDK에 대한 두 가지 NuGet 패키지(WinML 및 플랫폼 간 패키지)는 API 표면이 동일하지만 다른 플랫폼에 최적화되어 있습니다.
-
Windows: WinML(Windows Machine Learning) 프레임워크를 사용하는 Windows 애플리케이션과 관련된 패키지를 사용합니다
Microsoft.AI.Foundry.Local.WinML. -
플랫폼 간: 플랫폼 간 애플리케이션(Windows, Linux, macOS)에 사용할 수 있는 패키지를 사용합니다
Microsoft.AI.Foundry.Local.
대상 플랫폼에 따라 다음 지침에 따라 새 C# 애플리케이션을 만들고 필요한 종속성을 추가합니다.
다음 Windows별 또는 플랫폼 간(macOS/Linux/Windows) 지침에 따라 C# 프로젝트에서 Foundry Local을 사용합니다.
- 새 C# 프로젝트를 만들고 다음으로 이동합니다.
dotnet new console -n app-name cd app-name -
app-name.csproj파일을 열고 편집합니다.<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> - 프로젝트 루트에
nuget.config파일을 생성하고, 다음 콘텐츠를 포함시켜 패키지가 올바르게 복원되도록 합니다.<?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>
빠른 시작
이 코드 조각을 사용하여 SDK가 로컬 모델 카탈로그를 초기화하고 액세스할 수 있는지 확인합니다.
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()}");
다음은 하드웨어에 사용할 수 있는 모델 수를 인쇄하는 예제입니다.
참조:
재설계
디바이스 내 AI를 사용하여 애플리케이션을 배송하는 기능을 향상시키기 위해 버전 0.8.0 이상에서 C# SDK의 아키텍처가 크게 변경되었습니다. 이 섹션에서는 애플리케이션을 최신 버전의 SDK로 마이그레이션하는 데 도움이 되는 주요 변경 내용을 간략하게 설명합니다.
비고
SDK 버전 0.8.0 및 이후에서는 이전 버전의 API에 호환성을 깨는 변경 사항이 있습니다.
다음 다이어그램은 0.8.0 이전 버전에서의 이전 아키텍처가 REST 웹 서버를 사용하여 모델과 채팅 완료 처리 같은 추론을 관리하는 데 크게 의존하는 방법을 나타냅니다.
SDK는 RPC(원격 절차 호출)를 사용하여 컴퓨터에서 Foundry 로컬 CLI 실행 파일을 찾고, 웹 서버를 시작한 다음, HTTP를 통해 통신합니다. 이 아키텍처에는 다음을 비롯한 몇 가지 제한 사항이 있습니다.
- 웹 서버 수명 주기 관리의 복잡성.
- 까다로운 배포: 최종 사용자는 컴퓨터 및 애플리케이션에 Foundry 로컬 CLI를 설치해야 했습니다.
- CLI 및 SDK의 버전 관리로 인해 호환성 문제가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 버전 및 이후 버전 0.8.0 에서 새롭게 디자인된 아키텍처는 보다 간소화된 접근 방식을 사용합니다. 새 아키텍처는 다음과 같습니다.
이 새 아키텍처에서는 다음을 수행합니다.
- 애플리케이션이 자체적으로 포함되어 있습니다. 최종 사용자의 컴퓨터에 Foundry 로컬 CLI를 별도로 설치할 필요가 없으므로 애플리케이션을 더 쉽게 배포할 수 있습니다.
- REST 웹 서버는 선택 사항입니다. HTTP를 통해 통신하는 다른 도구와 통합하려는 경우에도 웹 서버를 사용할 수 있습니다. 이 기능을 사용하는 방법에 대한 자세한 내용은 Foundry Local과 함께 REST 서버를 통해 채팅 완료를 참조 하세요.
- SDK는 채팅 완료 및 오디오 전사를 기본적으로 지원하므로 종속성이 적은 대화형 AI 애플리케이션을 빌드할 수 있습니다. 이 기능을 사용하는 방법에 대한 자세한 내용은 Foundry 로컬 네이티브 채팅 완료 API를 참조 하세요.
- Windows 디바이스에서는 올바른 런타임 및 드라이버를 끌어와 디바이스의 모델에 대한 하드웨어 가속 을 처리하는 Windows ML 빌드를 사용할 수 있습니다.
API 변경
버전 0.8.0 이상에서는 보다 개체 지향적이고 구성 가능한 API를 제공합니다. 기본 진입점은 계속해서 FoundryLocalManager 클래스가 되지만, 상태 비저장 HTTP API에 대한 정적 호출을 통해 작동하는 단일 메서드 집합 대신, 이제 SDK는 서비스와 모델에 대한 상태를 유지하는 FoundryLocalManager 인스턴스의 메서드를 제공합니다.
| 원시적인 | 버전 < 0.8.0 | 버전 >= 0.8.0 |
|---|---|---|
| Configuration | N/A | config = Configuration(...) |
| 관리자 가져오기 | mgr = FoundryLocalManager(); |
await FoundryLocalManager.CreateAsync(config, logger);var mgr = FoundryLocalManager.Instance; |
| 카탈로그 가져오기 | N/A | catalog = await mgr.GetCatalogAsync(); |
| 모델 나열 | mgr.ListCatalogModelsAsync(); |
catalog.ListModelsAsync(); |
| 모델 가져오기 | mgr.GetModelInfoAsync("aliasOrModelId"); |
catalog.GetModelAsync(alias: "alias"); |
| 변형 가져오기 | N/A | model.SelectedVariant; |
| 변형 설정 | N/A | model.SelectVariant(); |
| 모델 다운로드 | mgr.DownloadModelAsync("aliasOrModelId"); |
model.DownloadAsync() |
| 모델 로드 | mgr.LoadModelAsync("aliasOrModelId"); |
model.LoadAsync() |
| 모델 언로드 | mgr.UnloadModelAsync("aliasOrModelId"); |
model.UnloadAsync() |
| 로드된 모델 나열 | mgr.ListLoadedModelsAsync(); |
catalog.GetLoadedModelsAsync(); |
| 모델 경로 가져오기 | N/A | model.GetPathAsync() |
| 서비스 시작 | mgr.StartServiceAsync(); |
mgr.StartWebServerAsync(); |
| 서비스 중지 | mgr.StopServiceAsync(); |
mgr.StopWebServerAsync(); |
| 캐시 위치 | mgr.GetCacheLocationAsync(); |
config.ModelCacheDir |
| 캐시된 모델 나열 | mgr.ListCachedModelsAsync(); |
catalog.GetCachedModelsAsync(); |
API를 사용하면 웹 서버, 로깅, 캐시 위치 및 모델 변형 선택을 통해 Foundry Local을 보다 쉽게 구성할 수 있습니다. 예를 들어 클래스를 Configuration 사용하면 애플리케이션 이름, 로깅 수준, 웹 서버 URL 및 애플리케이션 데이터, 모델 캐시 및 로그에 대한 디렉터리를 설정할 수 있습니다.
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"
};
참조:
이전 버전의 Foundry Local C# SDK에서는 SDK를 통해 이러한 설정을 직접 구성할 수 없으므로 서비스 동작을 사용자 지정하는 기능이 제한되었습니다.
애플리케이션 패키지 크기 줄이기
Foundry 로컬 SDK는 Microsoft.ML.OnnxRuntime.Foundry NuGet 패키지를 종속성으로 가져옵니다. 이 패키지는 Microsoft.ML.OnnxRuntime.Foundry 특정 공급업체 하드웨어 디바이스에서 유추를 효율적으로 실행하는 데 필요한 라이브러리 집합인 유추 런타임 번들을 제공합니다. 유추 런타임 번들에는 다음 구성 요소가 포함됩니다.
-
ONNX 런타임 라이브러리: 핵심 유추 엔진(
onnxruntime.dll)입니다. -
ONNX EP(런타임 실행 공급자) 라이브러리. ONNX 런타임의 하드웨어별 백엔드는 하드웨어 가속기를 사용하여 기계 학습 모델의 일부를 최적화하고 실행합니다. 예를 들어:
- CUDA EP:
onnxruntime_providers_cuda.dll - QNN EP:
onnxruntime_providers_qnn.dll
- CUDA EP:
-
IHV(독립 하드웨어 공급업체) 라이브러리. 예를 들어:
- WebGPU: DirectX 종속성(
dxcompiler.dll,dxil.dll) - QNN: Qualcomm QNN 종속성(
QnnSystem.dll등)
- WebGPU: DirectX 종속성(
다음 표에는 애플리케이션과 함께 번들로 제공되는 EP 및 IHV 라이브러리와 런타임에 다운로드/설치할 WinML이 요약되어 있습니다.
모든 플랫폼 및 아키텍처에서 CPU EP가 필요합니다. WebGPU EP 및 IHV 라이브러리의 크기는 작으며(예: WebGPU는 애플리케이션 패키지에 최대 7MB만 추가) Windows 및 macOS에서 필요합니다. 그러나 CUDA 및 QNN EP의 크기는 크므로(예: CUDA가 애플리케이션 패키지에 1GB를 추가) 애플리케이션 패키지에서 이러한 EP를 제외하는 것이 좋습니다. WinML은 최종 사용자에게 호환되는 하드웨어가 있는 경우 런타임에 CUDA 및 QNN을 다운로드/설치합니다.
비고
미래 버전에서는 Microsoft.ML.OnnxRuntime.Foundry 패키지에서 ExcludeExtraLibs.props 파일을 포함할 필요 없이 애플리케이션 패키지에서 CUDA 및 QNN EP를 제거할 수 있도록 작업하고 있습니다.
애플리케이션 패키지의 크기를 줄이려면 애플리케이션을 게시할 때 CUDA 및 QNN EP 및 IHV 라이브러리를 제외하는 다음 콘텐츠를 사용하여 프로젝트 디렉터리에 파일을 만들 ExcludeExtraLibs.props 수 있습니다.
<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>
프로젝트 파일(.csproj)에서 다음 줄을 추가하여 파일을 가져옵니다 ExcludeExtraLibs.props .
<!-- other project file content -->
<Import Project="ExcludeExtraLibs.props" />
Windows: CUDA 종속성
CUDA EP는 Linux 애플리케이션 Microsoft.ML.OnnxRuntime.Foundry으로 끌어오지만 IHV 라이브러리는 포함하지 않습니다. CUDA 사용 디바이스를 사용하는 최종 사용자가 더 높은 성능을 활용할 수 있도록 하려면 애플리케이션에 다음 CUDA IHV 라이브러리를 추가 해야 합니다.
- CUBLAS v12.8.4(NVIDIA 개발자에서 다운로드)
- cublas64_12.dll
- cublasLt64_12.dll
- CUDA RT v12.8.90(NVIDIA 개발자에서 다운로드)
- cudart64_12.dll
- CUDNN v9.8.0(NVIDIA 개발자에서 다운로드)
- cudnn_graph64_9.dll
- cudnn_ops64_9.dll
- cudnn64_9.dll
- CUDA FFT v11.3.3.83(NVIDIA 개발자에서 다운로드)
- cufft64_11.dll
경고
애플리케이션에 CUDA EP 및 IHV 라이브러리를 추가하면 애플리케이션 패키지의 크기가 1GB 증가합니다.
Samples
- Foundry 로컬 C# SDK를 사용하는 방법을 보여 주는 샘플 애플리케이션은 Foundry 로컬 C# SDK 샘플 GitHub 리포지토리를 참조하세요.
API 참고 자료
- Foundry 로컬 C# SDK에 대한 자세한 내용은 Foundry 로컬 C# SDK API 참조를 참조하세요.
Rust SDK 참조
Foundry Local용 Rust SDK는 모델을 관리하고, 캐시를 제어하고, Foundry 로컬 서비스와 상호 작용하는 방법을 제공합니다.
필수 조건
- Foundry Local을 설치하고,
foundry명령을 사용할 수 있는지PATH에서 확인합니다. - Rust 1.70.0 이상을 사용합니다.
설치
Foundry Local Rust SDK를 사용하려면 Cargo.toml에 다음을 추가합니다.
[dependencies]
foundry-local = "0.1.0"
또는 cargo를 사용하여 Foundry Local 크레이트를 추가할 수 있습니다.
cargo add foundry-local
빠른 시작
이 코드 조각을 사용하여 SDK가 서비스를 시작하고 로컬 카탈로그를 읽을 수 있는지 확인합니다.
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(())
}
다음은 서비스가 실행 중이고 카탈로그를 사용할 수 있을 때 0이 아닌 숫자를 인쇄하는 예제입니다.
참조:
FoundryLocalManager
Foundry 로컬 SDK 작업 관리자입니다.
분야
-
service_uri: Option<String>— Foundry 서비스의 URI입니다. -
client: Option<HttpClient>— API 요청에 대한 HTTP 클라이언트입니다. -
catalog_list: Option<Vec<FoundryModelInfo>>— 카탈로그 모델의 캐시된 목록입니다. -
catalog_dict: Option<HashMap<String, FoundryModelInfo>>— 카탈로그 모델의 캐시된 사전입니다. -
timeout: Option<u64>— 선택적 HTTP 클라이언트 시간 제한입니다.
메서드
pub fn builder() -> FoundryLocalManagerBuilder
FoundryLocalManager에 대한 새 작성기를 만듭니다.pub fn service_uri(&self) -> Result<&str>
서비스 URI를 가져옵니다.
반환: Foundry 서비스의 URI입니다.fn client(&self) -> Result<&HttpClient>
HTTP 클라이언트 인스턴스를 가져옵니다.
반환: HTTP 클라이언트.pub fn endpoint(&self) -> Result<String>
서비스의 엔드포인트를 가져옵니다.
반환: 엔드포인트 URL.pub fn api_key(&self) -> String
인증을 위한 API 키를 가져옵니다.
반환: API 키.pub fn is_service_running(&mut self) -> bool
서비스가 실행 중인지 확인하고 서비스 URI가 있는 경우 설정합니다.
반환: 실행 중인 경우true, 그렇지 않은 경우false.pub fn start_service(&mut self) -> Result<()>
Foundry 로컬 서비스를 시작합니다.pub async fn list_catalog_models(&mut self) -> Result<&Vec<FoundryModelInfo>>
카탈로그에서 사용 가능한 모델 목록을 가져옵니다.pub fn refresh_catalog(&mut self)
카탈로그 캐시를 새로 고칩니다.pub async fn get_model_info(&mut self, alias_or_model_id: &str, raise_on_not_found: bool) -> Result<FoundryModelInfo>
별칭 또는 ID로 모델 정보를 가져옵니다.
인수:-
alias_or_model_id: 별칭 또는 모델 ID입니다. -
raise_on_not_found: true이지만 찾을 수 없으면 오류가 발생합니다.
-
pub async fn get_cache_location(&self) -> Result<String>
캐시 위치를 문자열로 가져옵니다.pub async fn list_cached_models(&mut self) -> Result<Vec<FoundryModelInfo>>
캐시된 모델을 나열합니다.pub async fn download_model(&mut self, alias_or_model_id: &str, token: Option<&str>, force: bool) -> Result<FoundryModelInfo>
모델을 다운로드합니다.
인수:-
alias_or_model_id: 별칭 또는 모델 ID입니다. -
token: 선택적 인증 토큰입니다. -
force: 이미 캐시된 경우 강제로 다시 다운로드합니다.
-
pub async fn load_model(&mut self, alias_or_model_id: &str, ttl: Option<i32>) -> Result<FoundryModelInfo>
유추를 위해 모델을 로드합니다.
인수:-
alias_or_model_id: 별칭 또는 모델 ID입니다. -
ttl: 선택적 수명 제한(초 단위로).
-
pub async fn unload_model(&mut self, alias_or_model_id: &str, force: bool) -> Result<()>
모델을 언로드합니다.
인수:-
alias_or_model_id: 별칭 또는 모델 ID입니다. -
force: 사용 중인 경우에도 강제로 언로드합니다.
-
pub async fn list_loaded_models(&mut self) -> Result<Vec<FoundryModelInfo>>
로드된 모델을 나열합니다.
FoundryLocalManagerBuilder
FoundryLocalManager 인스턴스를 생성하는 빌더입니다.
분야
-
alias_or_model_id: Option<String>— 다운로드 및 로드할 별칭 또는 모델 ID입니다. -
bootstrap: bool— 서비스를 실행하지 않을 경우 시작할지 여부입니다. -
timeout_secs: Option<u64>— HTTP 클라이언트 시간 제한(초)입니다.
메서드
pub fn new() -> Self
새 작성기 인스턴스를 만듭니다.pub fn alias_or_model_id(mut self, alias_or_model_id: impl Into<String>) -> Self
다운로드하고 로드할 별칭 또는 모델 ID를 설정합니다.pub fn bootstrap(mut self, bootstrap: bool) -> Self
실행되지 않는 경우 서비스를 시작할지 여부를 설정합니다.pub fn timeout_secs(mut self, timeout_secs: u64) -> Self
HTTP 클라이언트 시간 제한을 초 단위로 설정합니다.pub async fn build(self) -> Result<FoundryLocalManager>
인스턴스를 빌드합니다FoundryLocalManager.
FoundryModelInfo
모델에 대한 정보를 나타냅니다.
분야
-
alias: String— 모델 별칭입니다. -
id: String— 모델 ID입니다. -
version: String— 모델 버전입니다. -
runtime: ExecutionProvider— 실행 공급자(CPU, CUDA 등)입니다. -
uri: String— 모델 URI입니다. -
file_size_mb: i32— 모델 파일 크기(MB)입니다. -
prompt_template: serde_json::Value— 모델에 대한 프롬프트 템플릿입니다. -
provider: String— 공급자 이름입니다. -
publisher: String— 게시자 이름입니다. -
license: String— 라이선스 유형입니다. -
task: String— 모델 작업(예: 텍스트 생성).
메서드
from_list_response(response: &FoundryListResponseModel) -> Self
카탈로그 응답에서FoundryModelInfo을(를) 만듭니다.to_download_body(&self) -> serde_json::Value
다운로드 요청을 위해 모델 정보를 JSON 본문으로 변환합니다.
ExecutionProvider
지원되는 실행 공급자에 대한 열거형.
CPUWebGPUCUDAQNN
메서드
get_alias(&self) -> String
실행 공급자에 대한 문자열 별칭을 반환합니다.
ModelRuntime
모델의 런타임 환경에 대해 설명합니다.
device_type: DeviceTypeexecution_provider: ExecutionProvider