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

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

Jul 18, 2024 am 12:38 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

See all articles