ホームページ >バックエンド開発 >Golang >Ollama クラウドの構築 - ローカル推論をクラウドに拡張する

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

WBOY
WBOYオリジナル
2024-07-18 00:38:11793ブラウズ

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

タウ

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

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

Code

You can find the complete code here https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/Ollama クラウドの構築 - ローカル推論をクラウドに拡張する

What's Next?

You can now build LLM applications with ease. Here are the steps to get started:

  • Start locally using dream: Set up your local environment to develop and test your application.
  • Create a project: Begin a new project with Tau to harness its full potential.
  • Create your production cloud: Deploy your project in a production cloud environment.
  • Drop the plugin binary in the /tb/plugins folder.
  • Import your project into production
  • Show off!

以上がOllama クラウドの構築 - ローカル推論をクラウドに拡張するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。