Задумка: Хочу приобщиться к чему-то новому, к примеру, разобрать как на Ubuntu 22.04 Server
развернуть: Ollama
Как я понял Ollama
— Это фреймворк для запуска и взаимодействия с языковыми моделями (LLM)
на своих ресурсах, т.е. можно к примеру, на виртуальной машине попробовать и если Вам это зайдет, то уже на базе отдельного железа собрать свой сервер и применять.
Языковые модели могут работать как на CPU (процессоры)
, так и на GPU (графические карты)
А после того как развернули выбранную языковую модель (LLM)
взаимодействие с ней идет либо через консоль, либо через API.
Шаг №1:
Сперва на официальном сайте ознакамливаюсь с системными требования, они могу отличаться в зависимости от конкретных языковых моделей (LLMs)
и задача, которые вы планируете выполнять:
Системные требования, как от чего отталкиваться:
OS: Ubuntu 22.04 и выше
RAM: 16Gb для запуска моделей размером 7B
HDD: 12Gb для установки Ollama и базовых моделей. Дополнительное пространство требуется для хранения данных моделей в зависимости от используемых моделей.
CPU: Процессоры не менее 4 ядер.
GPU: GPU не требуется для запуска ollama, но может улучшить производительность особенно при работе с большими моделями. Если у Вас есть GPU, вы можете использовать его для ускорения обучения пользовательских моделей.
Ethernet: Требуется доступ в интернет
Шаг №2:
Дабы посмотреть, что такое ollama
и как его использовать создам виртуальную машину на Debian 10 + Proxmox 6.4-13
(где CPU: AMD FX(tm)-6300 Six-Core Processor)
VM:
OS: Ubuntu 22.04 Server
CPU: 1 sockets (4 cores)
Type: host
RAM: 16Gb
HDD: 100Gb
Шаг №3:
Обновляем систему:
ekzorchik@srv-host1:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-host1:~$ sudo apt-get update && sudo apt-get upgrade -y
Шаг №4:
Скачиваю скрипт установки:
ekzorchik@srv-host1:~$ wget https://ollama.ai/install.sh
Шаг №5:
Запускаю скрипт установки:
ekzorchik@srv-host1:~$ sudo sh ./install.sh
>>> Installing ollama to /usr/local
>>> Downloading Linux amd64 bundle
############################################################################################ 100.0%
>>> Creating ollama user...
>>> Adding ollama user to render group...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
>>> The Ollama API is now available at 127.0.0.1:11434.
>>> Install complete. Run "ollama" from the command line.
WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode.
ekzorchik@srv-host1:~$
Шаг №6:
Смотрю для себя содержимое файла ollama.service:
ekzorchik@srv-host1:~$ cat /etc/systemd/system/ollama.service
[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=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
[Install]
WantedBy=default.target
ekzorchik@srv-host1:~$
Шаг №7:
Проверяю, что сервис запущен и работает:
ekzorchik@srv-host1:~$ sudo systemctl status ollama | head -n5
● ollama.service - Ollama Service
Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-02-24 14:16:47 MSK; 1min 21s ago
Main PID: 100478 (ollama)
Tasks: 9 (limit: 9389)
ekzorchik@srv-host1:~$
Шаг №8:
Проверяю, что сервис слушает порты:
ekzorchik@srv-host1:~$ sudo ss -napt | grep ollama
LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* users:(("ollama",pid=100478,fd=3))
ekzorchik@srv-host1:~$
слушает, но ожидает подключение только локально и из локальной сети подключиться нельзя.
Шаг №9:
Чтобы к сервису можно было подключиться из локальной сети:
ekzorchik@srv-host1:~$ sudo nano /etc/systemd/system/ollama.service
[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=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0"
[Install]
WantedBy=default.target
ekzorchik@srv-host1:~$ sudo systemctl daemon-reload
ekzorchik@srv-host1:~$ sudo systemctl restart ollama.service
ekzorchik@srv-host1:~$ sudo ss -napt | grep ollama
LISTEN 0 4096 *:11434 *:* users:(("ollama",pid=117392,fd=3))
ekzorchik@srv-host1:~$
Вот теперь к сервису можно подключиться.
Шаг №10:
Ознакомиться со списком моделей для ollama
можно перейдя по ссылке: https://ollama.com/library
Шаг №11:
Свое знакомство начну с упоминаемой в различных источниках — это модель 8B
от llama3
, для себя сделаю здесь краткую информацию по ней
Meta-Llama-3-8B — это языковая модель с 8 миллиардами параметров, разработанная компанией Meta в рамках семейства моделей Meta Llama 3.
Она оптимизирована для использования в диалоговых системах и превосходит многие доступные модели с открытым исходным кодом по общепринятым отраслевым показателям. При разработке модели особое внимание уделялось оптимизации полезности и безопасности.
Meta-Llama-3-8B использует оптимизированную архитектуру трансформеров и обучена с использованием методов supervised fine-tuning (SFT) и reinforcement learning with human feedback (RLHF) для лучшего соответствия человеческим предпочтениям в отношении полезности и безопасности.
Характеристики
8 миллиардов параметров
Оптимизированная архитектура трансформеров
Обучение с использованием SFT и RLHF
Длина контекста: 8000 токенов
Использование Grouped-Query Attention (GQA) для улучшенной масштабируемости вывода
Преимущества
Высокая производительность в диалоговых системах
Оптимизация полезности и безопасности
Превосходит многие модели с открытым исходным кодом по отраслевым показателям
Возможность тонкой настройки под конкретные задачи
Ограничения
Обучена преимущественно на английском языке
Возможность генерации неточных, предвзятых или нежелательных ответов в некоторых случаях
Необходимость дополнительного тестирования и настройки безопасности перед развертыванием в приложениях
Области применения
Чат-боты и виртуальные ассистенты
Генерация текста и кода
Ответы на вопросы и понимание естественного языка
Тонкая настройка под специфические задачи обработки естественного языка
Производительность
Meta-Llama-3-8B демонстрирует высокие результаты на различных бенчмарках, таких как MMLU, AGIEval, CommonSenseQA, SQuAD и других. Модель превосходит аналоги, такие как Llama2 7B и Llama2 13B, по большинству показателей.
Интересные факты
При обучении модели использовалось более 15 триллионов токенов данных из общедоступных источников, а также более 10 миллионов примеров с аннотациями, сделанными людьми.
Общий объем вычислений при предварительном обучении составил 7.7 миллионов GPU-часов, что привело к выбросам 2290 тонн CO2-эквивалента, которые были полностью компенсированы программой устойчивого развития Meta.
Компания Meta разработала руководство по ответственному использованию (Responsible Use Guide) и предоставляет инструменты, такие как Meta Llama Guard 2 и Code Shield, для обеспечения безопасности при развертывании приложений на основе Llama 3.
Meta-Llama-3-8B — мощная и эффективная языковая модель, оптимизированная для использования в диалоговых системах. Она сочетает высокую производительность, полезность и внимание к вопросам безопасности, что делает ее привлекательным выбором для разработчиков, стремящихся создавать передовые приложения с использованием обработки естественного языка.
Шаг №12:
Попробуем подгрузить первую модель в Ollama
(она бесплатна и ее можно запускать локальной на своем железе): (пример ниже — модель 8B
от llama3
)
исходя из ссылки https://ollama.com/library
размер модели 4.9Gb:
ekzorchik@srv-host1:~$ sudo ollama pull llama3:8b
pulling manifest
pulling 6a0746a1ec1a... 100% ▕███████████████████████████████████▏ 4.7 GB
pulling 4fa551d4f938... 100% ▕███████████████████████████████████▏ 12 KB
pulling 8ab4849b038c... 100% ▕███████████████████████████████████▏ 254 B
pulling 577073ffcc6c... 100% ▕███████████████████████████████████▏ 110 B
pulling 3f8eb4da87fa... 100% ▕███████████████████████████████████▏ 485 B
verifying sha256 digest
writing manifest
success
ekzorchik@srv-host1:~$
Скачанные модели располагаются в системе по пути: ekzorchik@srv-host1:~$ sudo ls -al /usr/share/ollama/.ollama/models
А сама скачанная модель, которую я выше загрузил себе тут:
ekzorchik@srv-host1:~$ sudo ls -alh /usr/share/ollama/.ollama/models/blobs
total 4.4G
drwxr-xr-x 2 ollama ollama 4.0K Feb 26 10:47 .
drwxr-xr-x 4 ollama ollama 4.0K Feb 26 09:49 ..
-rw-r--r-- 1 ollama ollama 485 Feb 26 10:47 sha256-3f8eb4da87fa7a3c9da615036b0dc418d31fef2a30b115ff33562588b32c691d
-rw-r--r-- 1 ollama ollama 13K Feb 26 10:47 sha256-4fa551d4f938f68b8c1e6afa9d28befb70e3f33f75d0753248d530364aeea40f
-rw-r--r-- 1 ollama ollama 110 Feb 26 10:47 sha256-577073ffcc6ce95b9981eacc77d1039568639e5638e83044994560d9ef82ce1b
-rw-r--r-- 1 ollama ollama 4.4G Feb 26 10:47 sha256-6a0746a1ec1aef3e7ec53868f220ff6e389f6f8ef87a01d77c96807de94ca2aa
-rw-r--r-- 1 ollama ollama 254 Feb 26 10:47 sha256-8ab4849b038cf0abc5b1c9b8ee1443dca6b93a045c2272180d985126eb40bf6f
ekzorchik@srv-host1:~$
Скачиваем этой модели — это как если открыть https://ollama.com/library
— через поиск указать llama3 (https://llama.meta.com/llama3/)
и выйти на
Шаг №13:
А что есть у языковой модели 8b, 70b, 0.5b, 1.5b, 3b, 7b, 14b, 32b, 72b
и т.к. если смотреть какие модели можно подгрузить во фреймворк ollama:
У моделей есть теги. На примере Llama3
теги 8b
и 70b
отличаются объемом и количеством записей в модели. От этого зависит точность работы модели и количество информации, на которой базируется модель. К примеру тег 8b содержит 8 миллиардов записей (весов/параметров), а 70b по аналогии 70 миллиардов записей (весов/параметров). Весит она больше, но и вычисления должна делать более подробные и точные.
Шаг №14:
Запускаем через фреймфорк ollama
скачанную языковую модель 8b:
ekzorchik@srv-host1:~$ ollama run llama3:8b
>>> Send a message (/? for help)
Посмотрим справку:
>>> /help
Available Commands:
/set Set session variables
/show Show model information
/load <model> Load a session or model
/save <model> Save your current session
/clear Clear session context
/bye Exit
/?, /help Help for a command
/? shortcuts Help for keyboard shortcuts
Use """ to begin a multi-line message.
Шаг №15:
Небольшие команды:
Чтобы удалить модель (я бы не удалял, уж очень долго они ставятся):
ollama rm <model_name>
Чтобы обновить модель:
ollama pull <model_name>
Чтобы показать список всех установленных моделей в системе:
ollama list
ekzorchik@srv-host1:~$ ollama list
NAME ID SIZE MODIFIED
llama3:8b 365c0bd3c000 4.7 GB 3 hours ago
ekzorchik@srv-host1:~$
Чтобы выйти из консоли взаимодействия с моделью:
>>> Ctrl + D or /bye
Шаг №16:
К примеру, у меня все оборудование дома на Mikrotik
, а если спросить/сформулировать запрос по настройке какого-либо функционала:
>>> youtube access from mikrotik wireguard mangle rules
A very specific and interesting question!
To allow YouTube access from your Mikrotik router using WireGuard and mangle rules, you'll
need to configure the following:
**Step 1: Configure WireGuard**
First, set up a WireGuard tunnel between your router and a remote server or another device.
This will establish an encrypted connection between the two.
**Step 2: Create a firewall rule for YouTube traffic**
Create a new firewall rule in Mikrotik's WebFig interface (or using the command-line tool
`mikrotik`):
* Name: "YouTube Allow"
* Chain: `input`
* Protocol: `udp` or `tcp` (depending on your preferred method of accessing YouTube)
* Destination port: `443` (HTTPS) or `1935` (RTMP, if you prefer to use the RTMP protocol for
live streams)
* Action: `accept`
**Step 3: Apply mangle rules**
To allow YouTube traffic through the WireGuard tunnel, you'll need to apply mangle rules.
Mangle rules modify the traffic before it's routed.
Create a new mangle rule:
* Name: "YouTube Allow"
* Chain: `prerouting`
* Protocol: `udp` or `tcp` (same as in Step 2)
* Destination port: `443` (HTTPS) or `1935` (RTMP)
* Action: `mark-routing`
This mangle rule will mark the YouTube traffic for routing through the WireGuard tunnel.
**Step 4: Add a routing rule**
Create a new routing rule:
* Name: "YouTube Routing"
* Chain: `routing`
* Mark: The same marking as in Step 3 (`mark-routing`)
* Action: `wireguard` (or the name of your WireGuard interface)
This routing rule will route the YouTube traffic through the WireGuard tunnel.
**Step 5: Verify the configuration**
Test your setup by accessing YouTube from a device connected to your Mikrotik router. You
should be able to access YouTube without any issues.
Here's an example of how you can apply these rules using Mikrotik's command-line tool:
```bash
/mangle add chain=prerouting protocol=tcp port=443 action=mark-routing
new-routing-mark=youtube
/route add chain=routing mark=youtube action=wireguard interface=wg0
```
Replace `wg0` with the name of your WireGuard interface.
By following these steps, you should be able to allow YouTube access from your Mikrotik
router using WireGuard and mangle rules.
и вот уже есть какая-то информацию, которую можно опробовать на тестовом Mikrotik
с предварительными настройками до дабы проверить свой вопрос/задачу.
Я считаю, что это очень хороший инструмент в лице языковых моделей, хоть все на английском, для меня это не минус а плюс, на крайняк есть Google Translate
если какая-либо фраза или предолжение не совсем понятно.
Шаг №17:
Взаимодействие с моделью через API:
ekzorchik@srv-host1:~$ curl http://172.33.33.142:11434/api/chat -d '{
"model": "llama3:8b",
"stream": false,
"messages": [
{ "role": "user", "content": "1 + 1" }
]
}'
{"model":"llama3:8b","created_at":"2025-02-26T10:51:05.249648041Z","message":{"role":"assistant","content":"The answer to 1 + 1 is... 2!"},"done_reason":"stop","done":true,"total_duration":10079317818,"load_duration":26819781,"prompt_eval_count":14,"prompt_eval_duration":4326000000,"eval_count":14,"eval_duration":5725000000}ekzorchik@srv-host1:~$
Что могу сказать, даже на своем не столь быстром железе я получил хоть ни какие, но все же знания и возможно желания собрать отдельную систему с целью изучения языковых моделей, но обязательно в локальном исполнении — я не приемлю арендуемое и все что не принадлежит мне.
Пока я заметку завершу, вернусь к этой теме в последующих, на этом все, с уважением автор блога Олло Александр aka ekzorchik.