Ollama は主に llama.cpp のラッパーであり、ローカル推論タスク用に設計されています。最先端のパフォーマンスや機能を探している場合、これは通常は最初の選択肢ではありませんが、特に外部依存関係が懸念される環境では用途があります。
ローカル AI 開発に Ollama を使用する場合、セットアップは簡単ですが効果的です。通常、開発者は Ollama を利用して、ローカル マシン上で推論タスクを直接実行します。以下は、Ollama を使用した典型的なローカル開発セットアップを視覚的に示したものです:
この構成により、開発者はリモート サーバー通信の複雑さを回避して、迅速にテストと反復を行うことができます。迅速な対応が重要な初期のプロトタイピングおよび開発段階に最適です。
ローカル セットアップからスケーラブルなクラウド環境への移行には、単純な 1:1 セットアップ (1 つの推論ホストに対する 1 つのユーザー リクエスト) から、より複雑な多対多 (複数の推論ホストに対する複数のユーザー リクエスト) 構成への進化が含まれます。 。この移行は、需要が増加するにつれて効率と応答性を維持するために必要です。
ローカル開発から本番環境に移行するときのこのスケーリングは次のようになります:
この移行中に単純なアプローチを採用すると、特にセッションがさまざまな状態間で一貫性を維持する必要があるため、アプリケーションの複雑さが大幅に増加する可能性があります。リクエストが利用可能な最適な推論ホストに最適にルーティングされない場合、遅延や非効率が発生する可能性があります。
さらに、分散アプリケーションは複雑な性質を持っているため、ローカルでのテストが難しく、開発プロセスが遅くなり、運用環境で障害が発生するリスクが高まる可能性があります。
サーバーレス コンピューティングはサーバー管理とインフラストラクチャの詳細を抽象化し、開発者がコードとビジネス ロジックだけに集中できるようにします。リクエストの処理と一貫性の維持をアプリケーションから切り離すことで、サーバーレス アーキテクチャによりスケーリングが簡素化されます。
このアプローチにより、アプリケーションは価値の提供に集中し続けることができ、インフラストラクチャの複雑さで開発者に負担をかけることなく、多くの一般的なスケーリング課題を解決できます。
WebAssembly (Wasm) は、アプリケーションを自己完結型モジュールにコンパイルできるようにすることで、依存関係管理の課題に対処します。これにより、ローカルとクラウドの両方でアプリのオーケストレーションとテストが容易になり、さまざまな環境間での一貫性が確保されます。
Tau は、メンテナンスの手間がかからず、拡張性の高いクラウド コンピューティング プラットフォームを構築するためのフレームワークです。シンプルさと拡張性に優れています。 Tau は展開を簡単にし、開発用のローカル クラウドの実行をサポートし、クラウド インフラストラクチャとその上で実行されるアプリケーションの両方のエンドツーエンド (E2E) テストを可能にします。
Taubyte が「ローカル コーディングとグローバル プロダクションの同等」と呼ぶこのアプローチは、ローカルで機能するものがグローバルでも機能することを保証し、開発と展開のプロセスを大幅に簡素化します。
Orbit として知られる Tau のプラグイン システムは、サービスを WebAssembly ホスト モジュールにラップすることで、サービスを管理可能なコンポーネントに変換する作業を大幅に簡素化します。このアプローチにより、Tau がオーケストレーション業務を引き継ぎ、展開と管理のプロセスを合理化できるようになります。
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) }
プラグインのテストは効率的かつ簡単です。 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 アプリケーションを簡単に構築できるようになりました。始める手順は次のとおりです:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3