«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создание облака Ollama — масштабирование локального вывода в облако

Создание облака Ollama — масштабирование локального вывода в облако

Опубликовано 29 июля 2024 г.
Просматривать:818

Ollama — это, прежде всего, оболочка llama.cpp, предназначенная для локальных задач вывода. Обычно это не лучший выбор, если вы ищете передовую производительность или функции, но он имеет свое применение, особенно в средах, где внешние зависимости вызывают беспокойство.

Локальная разработка искусственного интеллекта

При использовании Ollama для локальной разработки ИИ настройка проста, но эффективна. Разработчики обычно используют Ollama для запуска задач вывода непосредственно на своих локальных компьютерах. Вот визуальное изображение типичной локальной установки разработки с использованием Ollama:

Typical Local Development with Ollama

Эта конфигурация позволяет разработчикам быстро тестировать и выполнять итерации без сложностей связи с удаленным сервером. Он идеально подходит для начальных этапов прототипирования и разработки, где скорость выполнения работ имеет решающее значение.

От локального к облаку

Переход от локальной установки к масштабируемой облачной среде предполагает переход от простой настройки 1:1 (один запрос пользователя к одному хосту вывода) к более сложной конфигурации «многие ко многим» (несколько запросов пользователей к нескольким хостам вывода). . Этот сдвиг необходим для поддержания эффективности и оперативности реагирования по мере роста спроса.

Вот как выглядит это масштабирование при переходе от локальной разработки к производству:

View of Typical m:n Scaling

Принятие простого подхода во время этого перехода может значительно повысить сложность приложений, особенно потому, что сеансам необходимо поддерживать согласованность в различных состояниях. Задержки и снижение эффективности могут возникнуть, если запросы не маршрутизируются оптимальным образом на лучший доступный хост вывода.

Более того, сложная природа распределенных приложений затрудняет их локальное тестирование, что может замедлить процесс разработки и увеличить риск сбоев в производственных средах.

Бессерверный

Бессерверные вычисления абстрагируют детали управления сервером и инфраструктурой, позволяя разработчикам сосредоточиться исключительно на коде и бизнес-логике. Отделяя обработку запросов и обеспечение согласованности от приложения, бессерверная архитектура упрощает масштабирование.

Такой подход позволяет приложению сосредоточиться на предоставлении ценности, решая многие распространенные проблемы масштабирования, не обременяя разработчиков сложностями инфраструктуры.

Веб-сборка

WebAssembly (Wasm) решает проблему управления зависимостями, позволяя компилировать приложения в автономные модули. Это упрощает оркестрацию и тестирование приложений как локально, так и в облаке, обеспечивая согласованность в различных средах.

Тау

tau

Tau — это платформа для создания не требующих обслуживания и хорошо масштабируемых платформ облачных вычислений. Он отличается простотой и расширяемостью. Tau упрощает развертывание и поддерживает использование локального облака для разработки, позволяя проводить сквозное (E2E) тестирование как облачной инфраструктуры, так и приложений, работающих в ней.

Этот подход, названный Таубайтом «Локальное кодирование равно глобальному производству», гарантирует, что то, что работает локально, будет работать и глобально, что значительно упрощает процессы разработки и развертывания.

Интеграция Олламы в Тау с помощью системы плагинов Orbit

Система плагинов Tau, известная как Orbit, значительно упрощает превращение сервисов в управляемые компоненты, заключая их в хост-модули WebAssembly. Такой подход позволяет Тау взять на себя обязанности по оркестрации, оптимизируя процесс развертывания и управления.

Экспорт функций в Ollama

Чтобы сделать функции 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.

После определения эти функции, которые теперь вызываются через спутник.Экспорт, обеспечивают плавную интеграцию Олламы в среду Тау:

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 builder, вы можете создать свой плагин, развернуть его в тестовой среде и выполнить бессерверные функции для проверки функциональности:

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. Вот шаги для начала:

  • Начните использовать Dream локально: настройте локальную среду для разработки и тестирования вашего приложения.
  • Создайте проект: начните новый проект с Тау, чтобы полностью раскрыть его потенциал.
  • Создайте свое рабочее облако: разверните свой проект в рабочей облачной среде.
  • Поместите двоичный файл плагина в папку /tb/plugins.
  • Импортируйте свой проект в рабочую среду
  • Выпендриваться!
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/samyfodil/building-ollama-cloud-scaling-local-inference-to-the-cloud-2i1a?1. В случае нарушения прав обращайтесь по адресу [email protected]. удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3