Foundry Local を始める

Foundry Local を使用すると、Microsoft Foundry on Windowsの一部として、Windows デバイスで大規模な言語モデル (LLM) を直接ローカルで実行できます。 これは、Windows AI API よりも深く進む必要がある場合や、Copilot+ PCではないハードウェアをサポートする必要がある場合に適した代替手段です。 特別なアクセス許可やロック解除トークンは必要ありません。 ネイティブ SDK はアプリ プロセスで実行され、Foundry ローカル CLI や別のローカル REST サーバーは必要ありません。 コンソール アプリ、WinUI 3 アプリ、WPF アプリ、またはその他の.NET ホストでも、同じパターンが機能します。

Foundry Local に関連するテクノロジのロゴ

Note

Foundry Local の完全なドキュメント (CLI、モデル管理、オプションの REST サーバー、Python SDK など) は、Microsoft Foundry ドキュメントで管理されています。 このページのリンクは、必要なときにそこに移動します。 ブラウザーの [戻る] ボタンまたは階層リンクを使用して、いつでも Windows AI ドキュメントに戻れます。

Foundry Local がシナリオに適しているか不明な場合は、Windows AI ソリューションの選択 を参照のうえ、続行してください。

Prerequisites

  • Windows 11バージョン 24H2 (ビルド 26100) 以降
  • .NET 9.0 SDK 以降
  • 選択したモデルに十分なメモリとディスク領域を備えた x64 または Arm64 デバイス
  • 初期パッケージ、モデル、ランタイム コンポーネントのダウンロードのインターネット アクセス

Windows SDK では、互換性のある CPU、GPU、および NPU モデルバリアントを使用できます。 選択したモデルに互換性のある CPU バリアントがある場合、専用 GPU、NPU、またはCopilot+ PCは必要ありません。 使用可能な高速化とパフォーマンスは、デバイス、モデル、実行プロバイダーによって異なります。

Note

このクイック スタートでは、現在、Foundry Local エイリアス phi-4-miniで使用できる最新の Microsoft Phi モデルである Phi-4 Mini を使用します。 Foundry Local カタログエイリアスと推奨モデルは、カタログの進化に応じて変更される可能性があります。

Phi-4 Mini は、Windowsに付属する Windows AI API モデルである Phi Silica とは別です。 Phi Silica は引き続き制限付きアクセス機能であり、ロック解除トークンが必要です。 これは、制限付きアクセス機能トークンを必要としない Aion Instruct に置き換えられる予定です。 アクセスの詳細と移行タイムラインについては、「 Phi Silica の使用を開始する」 を参照してください。

省略可能: Foundry ローカル CLI をインストールする

このクイック スタートの SDK ワークフローでは、CLI は必要ありません。 ターミナルからモデルを検査および管理する場合にのみインストールします。

winget install Microsoft.FoundryLocal

その後、ターミナルを閉じて再度開き、 foundry コマンドが PATH 上に表示されるようにします。 確認:

foundry --version

プロジェクトの作成

dotnet new console -n FoundryLocalDemo
cd FoundryLocalDemo

NuGet パッケージにはネイティブ Windows バイナリが含まれているため、プロジェクトにはWindowsターゲット フレームワークとランタイム識別子が必要です。 FoundryLocalDemo.csprojを開き、<PropertyGroup> ブロックを次のように置き換えます。

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net9.0-windows10.0.26100.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <RuntimeIdentifiers>win-x64;win-arm64</RuntimeIdentifiers>
</PropertyGroup>

次に、復元して、新しいターゲットの資産ファイルを生成します。

dotnet restore

NuGet パッケージのインストール

現在の安定したWindows パッケージをインストールします。

dotnet add package Microsoft.AI.Foundry.Local.WinML

パッケージには、Foundry Local ネイティブ チャット API で使用される ChatMessage と関連する種類が含まれています。 現在のデバイスの互換性のあるモデルバリアントを選択し、ハードウェア アクセラレーションWindows ML 実行プロバイダーを使用できます。

Note

Windows以外のプラットフォームをターゲットにする必要がある場合は、代わりに Microsoft.AI.Foundry.Local を使用します。 Windows ML 統合なしで、同じ Foundry Local API サーフェスを提供します。

上記のコマンドを実行すると、現在の安定したパッケージがインストールされます。 WinUI チュートリアルでは、.NET 10 を使用し、パッケージ バージョンをピン留めして、完全なチュートリアルを再現できるようにします。

クイック スタート: モデルを実行する

Program.csの内容を次の内容に置き換え、dotnet run実行します。 プログラムは Foundry Local を初期化し、必要に応じてモデルをダウンロードし、チャットの完了を実行してクリーンアップします。

using Microsoft.AI.Foundry.Local;
using Microsoft.Extensions.Logging.Abstractions;
using Betalgo.Ranul.OpenAI.ObjectModels.RequestModels;

// 1. Initialize the native in-process Foundry Local SDK.
await FoundryLocalManager.CreateAsync(
    new Configuration { AppName = "my-app" },
    NullLogger.Instance);

var manager = FoundryLocalManager.Instance;
try
{
    // 2. Look up the model in the catalog by alias.
    var catalog = await manager.GetCatalogAsync();
    var model = await catalog.GetModelAsync("phi-4-mini")
        ?? throw new Exception(
            "Model 'phi-4-mini' not found in catalog. " +
            "Check your internet connection and available model aliases.");

    // 3. Download the model if it is not already cached.
    if (!await model.IsCachedAsync())
    {
        Console.Write("Downloading phi-4-mini...");
        await model.DownloadAsync(progress =>
        {
            Console.Write($"\rDownloading phi-4-mini  {progress,5:F1}%");
        });
        Console.WriteLine();
    }

    // 4. Load the model into memory.
    await model.LoadAsync();

    // 5. Run a chat completion.
    var chatClient = await model.GetChatClientAsync();
    var response = await chatClient.CompleteChatAsync(new[]
    {
        new ChatMessage { Role = "system", Content = "You are a helpful assistant." },
        new ChatMessage { Role = "user", Content = "Explain async/await in C# in two sentences." }
    });

    if (!response.Successful)
        throw new Exception(
            $"Chat completion failed: {response.Error?.Message ?? "unknown error"} " +
            $"(code: {response.Error?.Code})");

    var content = response.Choices![0].Message.Content;
    if (string.IsNullOrEmpty(content))
        throw new Exception(
            "Model returned empty content. " +
            "Try the request again or select another compatible model variant.");

    Console.WriteLine(content);
}
finally
{
    // 6. Clean up — always runs even if an earlier step throws.
    manager.Dispose();
}

ストリーミング応答

UI アプリのユーザー エクスペリエンスを向上するために、応答トークンをトークンごとにストリーミングします。 このスニペットは、上記のクイック スタートから続行されます。 chatClient は手順 5 から取得します。

using var cts = new CancellationTokenSource();

await foreach (var chunk in chatClient.CompleteChatStreamingAsync(
    new[] { new ChatMessage { Role = "user", Content = "Write a haiku about Windows." } },
    cts.Token))
{
    Console.Write(chunk.Choices?[0]?.Message?.Content);
}
Console.WriteLine();

生成パラメーターを調整する

chatClient.Settings.Temperature = 0.7f;
chatClient.Settings.MaxTokens = 512;
chatClient.Settings.TopP = 0.9f;

モデルのエイリアス

Foundry Local が互換性のあるハードウェアバリアントを選択できるように、モデル エイリアス (完全なモデル ID ではない) を GetModelAsync に渡します。 モデルとデバイスによっては、Snapdragon の QNN NPU バリアント、NVIDIA の CUDA バリアント、または CPU バリアントを使用できます。

オプションの CLI をインストールした場合は、それを実行して使用可能なエイリアスを確認します。

foundry model list

たとえば、Microsoft Phi-4 Mini モデルにはphi-4-miniを使用します。 カタログは時間の経過と同時に変化するため、 Foundry Local モデル カタログ で現在のエイリアスと使用可能なバリアントを確認してください。

Python クイックスタート

Foundry Local では、Python、JavaScript (Node.js)、Rust もサポートされています。 パターンの動作を確認するための最小限のPython例を次に示します。4 つの言語すべてに関する完全なチュートリアルは、Microsoft Foundry ドキュメントにあります。

次 のいずれかを インストールします。依存関係が競合しているため、両方をインストールしないでください onnxruntime-core 。

pip install foundry-local-sdk-winml   # Windows — includes hardware acceleration (recommended on Windows)
pip install foundry-local-sdk         # macOS/Linux, or Windows without hardware acceleration

Important

PyPI 上の foundry-local パッケージ ( -sdkなし) は、関係のないサード パーティ製パッケージです。 Microsoft Foundry Local SDK を取得するには、foundry-local-sdk または foundry-local-sdk-winml をインストールします。

app.pyを作成します。

from foundry_local_sdk import Configuration, FoundryLocalManager

FoundryLocalManager.initialize(Configuration(app_name="my-app"))
manager = FoundryLocalManager.instance

model = manager.catalog.get_model("phi-4-mini")
model.download(lambda p: print(f"\rDownloading {p:.0f}%", end="", flush=True))
model.load()

client = model.get_chat_client()
for chunk in client.complete_streaming_chat([{"role": "user", "content": "Why is the sky blue?"}]):
    print(chunk.choices[0].delta.content or "", end="", flush=True)
print()

model.unload()

次のコマンドを実行します。

python app.py

実行プロバイダーのセットアップ、エラー処理、モデルの一覧など、完全なPythonクイック スタートについては、Microsoft Foundry ドキュメントの Foundry Local の概要を参照してください。

WinUI 3 または WPF アプリから使用する

App.xaml.csまたはApp.csで 1 回初期化します。

protected override async void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    await FoundryLocalManager.CreateAsync(
        new Configuration { AppName = "MyWinUIApp" },
        NullLogger.Instance);
    // ...
}

次に、アプリ内の任意の場所でFoundryLocalManager.Instance を解決します。 アプリの終了ハンドラーで Dispose() を呼び出します。

アプリケーションの完全なチュートリアルについては、WinUI チュートリアルに進んでください。 明示的なモデルダウンロードの同意、進行状況、取り消し、アクセシビリティ、出力レビューについて説明します。

クラウドへのフォールバック

Foundry Local を Windows AI API と Azure OpenAI と組み合わせて、回復性のある多層パターンを実現します。 完全なコンパイル可能な例については、「Windows AI ソリューションを選択する」を参照してください。

Troubleshooting

OGA Error: N instances of struct Generators::Model were leaked
これらの警告は、プログラムが終了した後に表示され、無害です。 これらは、基になる ONNX Runtime GenAI (OGA) ライブラリのネイティブ リソース追跡から取得されます。 出力は正しいです。警告はコードに問題があることを示していません。

Error in cpuinfo: Unknown chip model name 'Snapdragon...'
ONNX ランタイムからのこの警告は、ライブラリが CPU 機能検出のために ARM SoC を認識しないことを意味します。 これは安全な既定値にフォールバックし、推論は通常どおり実行されます。 アクションは必要ありません。

Model '...' not found in catalog
SDK は、インターネットからモデル カタログを取得します。 ネットワーク接続を確認します。 特定のモデル エイリアスが見つからない場合は、 foundry model list 実行して使用可能なエイリアスを表示するか、 foundrylocal.ai/models で完全なカタログを参照します。

モデルから空のコンテンツが返される
要求をもう一度試し、選択したモデルにデバイスの互換性のあるバリアントがあることを確認します。 問題が解決しない場合は、小さいモデルまたは CPU バリアントを選択し、デバイスに十分な使用可能なメモリがあることを確認します。

foundry-local-sdk-winml requires onnxruntime-core==X.Y.Z, but you have ... which is incompatible
この pip 依存関係の競合は、 foundry-local-sdk-winml と foundry-local-sdk の両方がインストールされていることを意味します。異なるバージョンの onnxruntime-core をピン留めし、共存することはできません。 1 つをアンインストールします。

pip uninstall foundry-local-sdk        # if you want the winml (Windows) package
pip uninstall foundry-local-sdk-winml  # if you want the cross-platform package

次に、必要なものを再インストールします。 仮想環境を使用すると、この問題を完全に回避できます。