「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Ollama クラウドの構築 - ローカル推論をクラウドに拡張する

Ollama クラウドの構築 - ローカル推論をクラウドに拡張する

2024 年 7 月 29 日に公開
ブラウズ:139

Ollama は主に llama.cpp のラッパーであり、ローカル推論タスク用に設計されています。最先端のパフォーマンスや機能を探している場合、これは通常は最初の選択肢ではありませんが、特に外部依存関係が懸念される環境では用途があります。

ローカルAI開発

ローカル AI 開発に Ollama を使用する場合、セットアップは簡単ですが効果的です。通常、開発者は Ollama を利用して、ローカル マシン上で推論タスクを直接実行します。以下は、Ollama を使用した典型的なローカル開発セットアップを視覚的に示したものです:

Typical Local Development with Ollama

この構成により、開発者はリモート サーバー通信の複雑さを回避して、迅速にテストと反復を行うことができます。迅速な対応が重要な初期のプロトタイピングおよび開発段階に最適です。

ローカルからクラウドへ

ローカル セットアップからスケーラブルなクラウド環境への移行には、単純な 1:1 セットアップ (1 つの推論ホストに対する 1 つのユーザー リクエスト) から、より複雑な多対多 (複数の推論ホストに対する複数のユーザー リクエスト) 構成への進化が含まれます。 。この移行は、需要が増加するにつれて効率と応答性を維持するために必要です。

ローカル開発から本番環境に移行するときのこのスケーリングは次のようになります:

View of Typical m:n Scaling

この移行中に単純なアプローチを採用すると、特にセッションがさまざまな状態間で一貫性を維持する必要があるため、アプリケーションの複雑さが大幅に増加する可能性があります。リクエストが利用可能な最適な推論ホストに最適にルーティングされない場合、遅延や非効率が発生する可能性があります。

さらに、分散アプリケーションは複雑な性質を持っているため、ローカルでのテストが難しく、開発プロセスが遅くなり、運用環境で障害が発生するリスクが高まる可能性があります。

サーバーレス

サーバーレス コンピューティングはサーバー管理とインフラストラクチャの詳細を抽象化し、開発者がコードとビジネス ロジックだけに集中できるようにします。リクエストの処理と一貫性の維持をアプリケーションから切り離すことで、サーバーレス アーキテクチャによりスケーリングが簡素化されます。

このアプローチにより、アプリケーションは価値の提供に集中し続けることができ、インフラストラクチャの複雑さで開発者に負担をかけることなく、多くの一般的なスケーリング課題を解決できます。

Webアセンブリ

WebAssembly (Wasm) は、アプリケーションを自己完結型モジュールにコンパイルできるようにすることで、依存関係管理の課題に対処します。これにより、ローカルとクラウドの両方でアプリのオーケストレーションとテストが容易になり、さまざまな環境間での一貫性が確保されます。

タウ

tau

Tau は、メンテナンスの手間がかからず、拡張性の高いクラウド コンピューティング プラットフォームを構築するためのフレームワークです。シンプルさと拡張性に優れています。 Tau は展開を簡単にし、開発用のローカル クラウドの実行をサポートし、クラウド インフラストラクチャとその上で実行されるアプリケーションの両方のエンドツーエンド (E2E) テストを可能にします。

Taubyte が「ローカル コーディングとグローバル プロダクションの同等」と呼ぶこのアプローチは、ローカルで機能するものがグローバルでも機能することを保証し、開発と展開のプロセスを大幅に簡素化します。

Orbit プラグイン システムを使用して Ollama を Tau に統合する

Orbit として知られる Tau のプラグイン システムは、サービスを WebAssembly ホスト モジュールにラップすることで、サービスを管理可能なコンポーネントに変換する作業を大幅に簡素化します。このアプローチにより、Tau がオーケストレーション業務を引き継ぎ、展開と管理のプロセスを合理化できるようになります。

Ollama のエクスポート関数

Tau のエコシステム内で Ollama 機能にアクセスできるようにするために、Orbit システムを利用して Ollama の機能を呼び出し可能なエンドポイントとしてエクスポートします。 Go でエンドポイントをエクスポートする方法は次のとおりです:

func (s *ollama) W_pull(ctx context.Context, module satellite.Module, modelNamePtr uint32, modelNameSize uint32, pullIdptr uint32) Error {
    model, err := module.ReadString(modelNamePtr, modelNameSize)
    if err != nil {
        return ErrorReadMemory
    }

    id, updateFunc := s.getPullId(model)

    if updateFunc != nil {
        go func() {
            err = server.PullModel(s.ctx, model, &server.RegistryOptions{}, updateFunc)
            s.pullLock.Lock()
            defer s.pullLock.Unlock()
            s.pulls[id].err = err
        }()
    }

    module.WriteUint64(pullIdptr, id)

    return ErrorNone
}

関数をエクスポートする簡単な例については、hello_world の例を参照してください。

一度定義すると、satellite.Export 経由で呼び出されるこれらの関数により、Ollama を Tau の環境にシームレスに統合できるようになります。

func main() {
    server := new(context.TODO(), "/tmp/ollama-wasm")
    server.init()
    satellite.Export("ollama", server)
}

Ollama プラグインのテストの作成

プラグインのテストは効率的かつ簡単です。 Go でサーバーレス関数テストを作成する方法は次のとおりです:

//export pull
func pull() {
    var id uint64
    err := Pull("gemma:2b-instruct", &id)
    if err != 0 {
        panic("failed to call pull")
    }
}

Tau のテスト スイートと Go ビルダー ツールを使用すると、プラグインを構築し、テスト環境にデプロイし、サーバーレス関数を実行して機能を検証できます。

func TestPull(t *testing.T) {
    ctx := context.Background()

    // Create a testing suite to test the plugin
    ts, err := suite.New(ctx)
    assert.NilError(t, err)

    // Use a Go builder to build plugins and wasm
    gob := builder.New()

    // Build the plugin from the directory
    wd, _ := os.Getwd()
    pluginPath, err := gob.Plugin(path.Join(wd, "."), "ollama")
    assert.NilError(t, err)

    // Attach plugin to the testing suite
    err = ts.AttachPluginFromPath(pluginPath)
    assert.NilError(t, err)

    // Build a wasm file from serverless function
    wasmPath, err := gob.Wasm(ctx, path.Join(wd, "fixtures", "pull.go"), path.Join(wd, "fixtures", "common.go"))
    assert.NilError(t, err)

    // Load the wasm module and call the function
    module, err := ts.WasmModule(wasmPath)
    assert.NilError(t, err)

    // Call the "pull" function from our wasm module
    _, err = module.Call(ctx, "pull")
    assert.NilError(t, err)
}

コード

完全なコードはここで見つけることができます https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/tau

次は何ですか?

LLM アプリケーションを簡単に構築できるようになりました。始める手順は次のとおりです:

  • dream を使用してローカルで開始する: アプリケーションを開発およびテストするためにローカル環境をセットアップします。
  • プロジェクトの作成: Tau の可能性を最大限に活用するために、Tau で新しいプロジェクトを開始します。
  • 実稼働クラウドの作成: 実稼働クラウド環境にプロジェクトをデプロイします。
  • プラグイン バイナリを /tb/plugins フォルダーにドロップします。
  • プロジェクトを本番環境にインポートします
  • 見せびらかす!
リリースステートメント この記事は次の場所に転載されています: https://dev.to/samyfodil/building-ollama-cloud-scaling-local-inference-to-the-cloud-2i1a?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3