Мое первое знакомство с ollama

Мое первое знакомство с ollama

Надоело использовать зоопарк из HF кода для тестирования моделек, как и мне? :-) Пришло время упростить этот процесс с помощью популярного инструмента ollama, полезного для разработчиков и исследователей. Здесь в статье будет упор про терминальное использование на linux, но есть множество разных вариантов GUI - изучайте.

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

Библиотека сильно упрощает скачивание и инференс моделей, предлагая разные квантизированные версии GGUF - 2, 3, 6, 5, 8 бит или FP16, можно сразу работать с чат версией и одновременно по API выполнять запросы с режимом стриминга.

Ollama предлагает несколько ключевых преимуществ:

  • Локальное выполнение: Ollama позволяет запускать большие языковые модели (LLM) локально на вашем компьютере, устраняя необходимость отправки данных на сторонние серверы. Это обеспечивает конфиденциальность и безопасность данных.
  • Простота использования: Ollama предоставляет простой API и предварительно настроенные для инференс модели, не надо самому ковыряться в системных промптах, сокращая время и усилия на разработку приложений на основе LLM, таких как чат-боты, инструменты обобщения и помощники.
  • Расширяемость: Ollama является высоко расширяемой, позволяя пользователям создавать пользовательские модели, импортировать модели из других источников и точно настраивать модели для определенных задач или приложений. На официальном гитхабе можно увидеть обширный список расширений и интеграций, множество GUI.
  • Автономная работа: Поскольку Ollama работает локально, она может функционировать без подключения к Интернету, что делает ее подходящей для сценариев с ограниченным или отсутствующим подключением.
  • Улучшенная производительность: использует и CPU и GPU, модели которые не влазят в память видеокарты частично выносятся в оперативку.

Установка и первый запуск

Программа поставляется для MacOS, Linux, Windows. Есть также в докере. Для винды надо качнуть дистрибутив и установить. В линуксе достаточно одной команды:

curl -fsSL https://ollama.com/install.sh | sh

Стоит заметить, что ollama запускается как системный сервис в операционной системе и весит в памяти. Это не скрипт python.

В каталоге Library можно найти совместимые на данный момент модели:

Удобно что сразу показаны все варианты конкретной модели

Мое первое знакомство с ollama

Чтобы запустить модель достаточно в терминале линукса или винды, указать команду с название модели и сразу откроется чат.

ollama run llava

Можно запускать одновременно несколько моделей, ollama автоматически выгрузит из памяти не активную и загрузит с которой актуален чат. По АПИ такая же история - если модель скачана, значит ее прогрузит, даже если не запускать ollama run по этой модели.

Прикольно, что можно просто в терминале мультимоделке указать путь к картинке

What's in this image? /Users/jmorgan/Desktop/smile.png The image features a yellow smiley face, which is likely the central focus of the picture.

Делаем вывод файла системной командой cat

$ ollama run llama2 "Summarize this file: $(cat README.md)"

Пример API запроса через CURL

curl http://localhost:11434/api/generate -d '{ "model": "llava", "prompt":"What is in this picture?", "images": ["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"] }'

На питоне через API

Для работы с контекстом рекомендую сразу поставить "options":{ "seed": 123,"temperature": 0}, иначе часто будут всякие помехи вылазить

import requests import json import timeit #Перевод prompt= """Translate the text from English to Russian: General Motors said it will bring a new model of the Chevrolet Bolt electric vehicle to market on an undisclosed date, reversing its decision three months ago to scrap the company’s most popular and affordable EV. """ start = timeit.default_timer() result = requests.post('http://localhost:11434/api/generate', json={'model': "mixtral:8x7b-instruct-v0.1-q4_K_M", "options":{ "seed": 123,"temperature": 0}, "prompt":prompt, "stream": False}).contentprint(result.decode('utf-8')) end = timeit.default_timer() print(f"Time to retrieve response: {end - start}")

Настройка системных параметров ollama

Я сразу столкнулся с необходимостью изменения параметров сервиса. Это оказалось не так гибко - через systemd, что требует редактирования файла и перезапуск сервиса.

Как настроить ollama для работы с одной GPU

Имея несколько видеокарт можно столкнуться с необходимостью запуска только на некоторых из них. Чтобы это сделать необходимо указать через CUDA_VISIBLE_DEVICES какие номера GPU будут видны

Environment="CUDA_VISIBLE_DEVICES=0"

Как изменить папку для моделей ollama

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

Environment="OLLAMA_MODELS=/disk_ext/ollama/models"

Прописать эти параметры нужно в systemd. Рекомендуют это через команду systemctl edit ollama.service - но у меня проще получилось через редактирование напрямую в файла, в Ubuntu 22 который расположен здесь:

/etc/systemd/system/ollama.service

Содержание файла ниже, но не указал настройки выбора количество GPU, ибо передумал :-), потому что мучаю большие в основном модели.

[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=/home/leonardo/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" Environment="OLLAMA_MODELS=/disk_ext/ollama/models" [Install] WantedBy=default.target

После редактирования systemd запускаем команды

systemctl daemon-reload systemctl restart ollama

Как узнать информацию о модели

С помощью простой команды можно вывести лицензию и какие параметры, включая системный промпт, заданы.

curl http://localhost:11434/api/show -d '{ "name": "mixtral:8x7b-instruct-v0.1-q8_0" }'
Мое первое знакомство с ollama

Как обновить ollama

Если редактировали конфиг как я через nano ollama.service то он затрется.

curl -fsSL https://ollama.com/install.sh | sh

Ошибочная работа на Windows

Сначала я попробовал на виндовс запустить ollama и при инференсе возник странный вывод - две модели отвечали на русском, но быстро уходили в английский или выдавали ерунду. Версия для виндовс у них сырая, так что все может быть.

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

33
9 комментариев

Тоже пробовал, но отвечает жутко долго. И это на не самом слабом маке. Думал на сервер установить и по апихе обращаться, но игра свеч не стоит.

Какие модели пробовали и с какой квантизацией?

Привет. Подскажите если на оламе использовать модель mistral, то можно задавать вопросы на русском языке?

Да, конечно. Любые модели с русским языком работают, но не все это делают хорошо.

У меня на Винде с 3060 работает довольно шустро. Но когда ввожу длинные тексты на русском для классификации, отказывается отвечать на русском вообще.

А как ей настраивать SYSTEM (системный промпт)?
И как запускать модели пользователей? https://ollama.com/sergo1217/rugpt-3.5

Дело в том, что чем длинее контекст тем больше требуется памяти. Соответственно, когда короткий контекст у вас модель влазит в память GPU, а когда длинный - нет и задействуется CPU.

Обучение llama на своих текстах