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) }
You can find the complete code here https://github.com/ollama-cloud/ollama-as-wasm-plugin/tree/main/Ollama クラウドの構築 - ローカル推論をクラウドに拡張する
You can now build LLM applications with ease. Here are the steps to get started:
以上がOllama クラウドの構築 - ローカル推論をクラウドに拡張するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。