Maison >développement back-end >Golang >Création d'Ollama Cloud - Mise à l'échelle de l'inférence locale vers le cloud

Création d'Ollama Cloud - Mise à l'échelle de l'inférence locale vers le cloud

WBOY
WBOYoriginal
2024-07-18 00:38:11793parcourir

Ollama est avant tout un wrapper autour de llama.cpp, conçu pour les tâches d'inférence locales. Ce n'est généralement pas votre premier choix si vous recherchez des performances ou des fonctionnalités de pointe, mais il a son utilité, en particulier dans les environnements où les dépendances externes sont un problème.

Développement local de l'IA

Lorsque vous utilisez Ollama pour le développement d'IA locale, la configuration est simple mais efficace. Les développeurs utilisent généralement Ollama pour exécuter des tâches d'inférence directement sur leurs machines locales. Voici une représentation visuelle d'une configuration de développement local typique utilisant Ollama :

Typical Local Development with Ollama

Cette configuration permet aux développeurs de tester et d'itérer rapidement sans les complexités des communications avec le serveur distant. Il est idéal pour les phases initiales de prototypage et de développement où un délai d'exécution rapide est essentiel.

Du local au cloud

La transition d'une configuration locale vers un environnement cloud évolutif implique de passer d'une simple configuration 1:1 (une demande d'utilisateur à un hôte d'inférence) à une configuration plusieurs-à-plusieurs plus complexe (plusieurs demandes d'utilisateur à plusieurs hôtes d'inférence). . Ce changement est nécessaire pour maintenir l’efficacité et la réactivité à mesure que la demande augmente.

Voici à quoi ressemble cette mise à l'échelle lorsque l'on passe du développement local à la production :

View of Typical m:n Scaling

L'adoption d'une approche simple pendant cette transition peut augmenter considérablement la complexité des applications, d'autant plus que les sessions doivent maintenir la cohérence entre les différents états. Des retards et des inefficacités peuvent survenir si les demandes ne sont pas acheminées de manière optimale vers le meilleur hôte d'inférence disponible.

De plus, la nature complexe des applications distribuées rend difficile leur test local, ce qui peut ralentir le processus de développement et augmenter le risque de pannes dans les environnements de production.

Sans serveur

L'informatique sans serveur résume les détails de la gestion des serveurs et de l'infrastructure, permettant aux développeurs de se concentrer uniquement sur le code et la logique métier. En dissociant la gestion des requêtes et la maintenance de la cohérence de l'application, l'architecture sans serveur simplifie la mise à l'échelle.

Cette approche permet à l'application de rester concentrée sur la création de valeur, en résolvant de nombreux problèmes de mise à l'échelle courants sans alourdir les développeurs avec des complexités d'infrastructure.

Assemblage Web

WebAssembly (Wasm) relève le défi de la gestion des dépendances en permettant la compilation d'applications dans des modules autonomes. Cela facilite l'orchestration et le test des applications, à la fois localement et dans le cloud, garantissant ainsi la cohérence dans différents environnements.

Tau

Création dOllama Cloud - Mise à léchelle de linférence locale vers le cloud

Tau est un framework permettant de créer des plates-formes de cloud computing nécessitant peu de maintenance et hautement évolutives. Il excelle en simplicité et en extensibilité. Tau simplifie le déploiement et prend en charge l'exécution d'un cloud local pour le développement, permettant ainsi des tests de bout en bout (E2E) de l'infrastructure cloud et des applications qui y sont exécutées.

Cette approche, appelée par Taubyte « Le codage local équivaut à une production mondiale », garantit que ce qui fonctionne localement fonctionnera à l'échelle mondiale, facilitant considérablement les processus de développement et de déploiement.

Intégration d'Ollama dans Tau avec le système de plugin Orbit

Le système de plugins de Tau, connu sous le nom d'Orbit, simplifie considérablement la transformation des services en composants gérables en les encapsulant dans des modules hôtes WebAssembly. Cette approche permet à Tau de prendre en charge les tâches d'orchestration, rationalisant ainsi le processus de déploiement et de gestion.

Exportation de fonctions dans Ollama

Pour rendre les fonctions d'Ollama accessibles au sein de l'écosystème de Tau, nous utilisons le système Orbit pour exporter les capacités d'Ollama sous forme de points de terminaison appelables. Voici comment exporter un point de terminaison dans 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
}

Pour un exemple simple d'exportation de fonctions, vous pouvez vous référer à l'exemple hello_world.

Une fois définies, ces fonctions, désormais appelées via satellite.Export, permettent l'intégration transparente d'Ollama dans l'environnement de Tau :

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

Rédaction de tests pour le plugin Ollama

Le test du plugin est simplifié et simple. Voici comment écrire un test de fonction sans serveur dans Go :

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

À l'aide de la suite de tests de Tau et des outils de création Go, vous pouvez créer votre plugin, le déployer dans un environnement de test et exécuter les fonctions sans serveur pour vérifier la fonctionnalité :

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/Création dOllama Cloud - Mise à léchelle de linférence locale vers le cloud

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!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn