Задумка: Хочу приобщиться к чему-то новому, к примеру, разобрать как на 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/) и выйти на

Языковая модель llama3, как 8b так и 70b

Шаг №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.