Надоело использовать зоопарк из 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.comlibraryGet up and running with large language models.Удобно что сразу показаны все варианты конкретной моделиЧтобы запустить модель достаточно в терминале линукса или винды, указать команду с название модели и сразу откроется чат. 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Документация по API.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Если редактировали конфиг как я через nano ollama.service то он затрется.curl -fsSL https://ollama.com/install.sh | shОшибочная работа на WindowsСначала я попробовал на виндовс запустить ollama и при инференсе возник странный вывод - две модели отвечали на русском, но быстро уходили в английский или выдавали ерунду. Версия для виндовс у них сырая, так что все может быть.На этом пока все, возможно дополню позже. Если нашли неточность в описании - буду рад поправкам. Также вы можете подписаться на мой ТГ-канал, где я делюсь своими находками и опытом.
Тоже пробовал, но отвечает жутко долго. И это на не самом слабом маке. Думал на сервер установить и по апихе обращаться, но игра свеч не стоит.
Какие модели пробовали и с какой квантизацией?
Привет. Подскажите если на оламе использовать модель mistral, то можно задавать вопросы на русском языке?
Да, конечно. Любые модели с русским языком работают, но не все это делают хорошо.
У меня на Винде с 3060 работает довольно шустро. Но когда ввожу длинные тексты на русском для классификации, отказывается отвечать на русском вообще.
А как ей настраивать SYSTEM (системный промпт)?
И как запускать модели пользователей? https://ollama.com/sergo1217/rugpt-3.5
Дело в том, что чем длинее контекст тем больше требуется памяти. Соответственно, когда короткий контекст у вас модель влазит в память GPU, а когда длинный - нет и задействуется CPU.
Обучение llama на своих текстах