posts: selfhosted_llm: linting

This commit is contained in:
He4eT 2024-01-17 13:51:05 +01:00
commit a247d4fb3f

View file

@ -15,18 +15,18 @@ description: 'Персональная LLM в docker-контейнере на
# Your Own Private Large Language Models
С одной стороны, я сомневаюсь, что Большие Языковые Модели (LLM) смогут однажды эволюционировать в AGI. С другой - я по-настоящему впечатлён тем, что щепотка статистики справляется с написанием текстов лучше меня.
С одной стороны, я сомневаюсь, что Большие Языковые Модели (LLM) смогут однажды эволюционировать в AGI. С другой — я по-настоящему впечатлён тем, что щепотка статистики справляется с написанием текстов лучше меня.
В любом случае, джина обратно в бутылку уже не вернуть, и все те письма в различные организации, которые я не хочу писать сам, будут теперь написаны месивом из байтиков.
В любом случае, джина обратно в бутылку уже не вернуть, и все те письма в различные организации, которые я не хочу писать сам, будут теперь написаны месивом из байтиков.
Действительно пугает меня в этой ситуации только то, что флагманом новой эры почему-то стала компания OpenAI, которая, вопреки названию, совершенно не Open.
Множество компаний и людей вписали их продукты в свою рутину и не страшатся такой неподконтрольной зависимости.
Действительно пугает меня в этой ситуации только то, что флагманом новой эры почему-то стала компания OpenAI, которая, вопреки названию, совершенно не Open.
Множество компаний и людей вписали их продукты в свою рутину и не страшатся такой неподконтрольной зависимости.
Я так не могу. К счастью, я не один такой, и на данный момент уже есть множество альтернативных моделей от разных вендоров. Они отличаются друг от друга качеством, размером, возможностями и лицензиями, так что при желании можно надолго занять себя знакомством с обширным ассортиментом. Например, на портале [HuggingFace](https://huggingface.co/), который можно описать как "GitHub для LLM и всего, что вокруг".
Я так не могу. К счастью, я не один такой, и на данный момент уже есть множество альтернативных моделей от разных вендоров. Они отличаются друг от друга качеством, размером, возможностями и лицензиями, так что при желании можно надолго занять себя знакомством с обширным ассортиментом. Например, на портале [HuggingFace](https://huggingface.co/), который можно описать как «GitHub для LLM и всего, что вокруг».
Должен признаться, что очень слабо разбираюсь в параметрах и характеристиках языковых моделей, но оказалось, что для того, чтобы начать, эти знания не так уж и необходимы.
Должен признаться, что очень слабо разбираюсь в параметрах и характеристиках языковых моделей, но оказалось, что для того, чтобы начать, эти знания не так уж и необходимы.
Ниже инструкция, как запустить LLM на своём железе, как упаковать всё это в docker-контейнер, чтобы не размазать случайно по всей файловой системе, как получить совместимый с OpenAI API и как потом этим пользоваться.
Ниже инструкция, как запустить LLM на своём железе, как упаковать всё это в docker-контейнер, чтобы не размазать случайно по всей файловой системе, как получить совместимый с OpenAI API и как потом этим пользоваться.
---
@ -45,66 +45,66 @@ description: 'Персональная LLM в docker-контейнере на
<div id='setup'></div>
## Установка и настройка
## Установка и&nbsp;настройка
Существует несколько продуктов, которые стараются избавить пользователя от головной боли и возни с инфраструктурой. Мне понятнее всего оказался проект [Ollama](https://ollama.ai/), с ним мы и будем экспериментировать.
Существует несколько продуктов, которые стараются избавить пользователя от&nbsp;головной боли и&nbsp;возни с&nbsp;инфраструктурой. Мне понятнее всего оказался проект [Ollama](https://ollama.ai/), с&nbsp;ним мы&nbsp;и&nbsp;будем экспериментировать.
Кроме бинарников для Linux и MacOS, они [предоставляют](https://ollama.ai/blog/ollama-is-now-available-as-an-official-docker-image) официальный [docker-образ](https://hub.docker.com/r/ollama/ollama), работу с которым я и опишу.
Кроме бинарников для Linux и&nbsp;MacOS, они [предоставляют](https://ollama.ai/blog/ollama-is-now-available-as-an-official-docker-image) официальный [docker-образ](https://hub.docker.com/r/ollama/ollama), работу с&nbsp;которым я&nbsp;и&nbsp;опишу.
Использование docker-контейнеров, к сожалению, слегка усложняет взаимодействие с Ollama, так что большая часть текста и кода в этом посте посвящены решению проблем, которые, по сути, я придумал себе сам.
Использование docker-контейнеров, к&nbsp;сожалению, слегка усложняет взаимодействие с&nbsp;Ollama, так что большая часть текста и&nbsp;кода в&nbsp;этом посте посвящены решению проблем, которые, по&nbsp;сути, я&nbsp;придумал себе сам.
<div id='setup-ollama'></div>
### Установка Ollama
Для создания и первого запуска контейнера нужно выполнить команду:
Для создания и&nbsp;первого запуска контейнера нужно выполнить команду:
```
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```
Счастливые владельцы видеокарт от Nvidia могут установить [Nvidia container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation) и активировать поддержку GPU с помощью флага `--gpus=all`.
Счастливые владельцы видеокарт от&nbsp;Nvidia могут установить [Nvidia container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation) и&nbsp;активировать поддержку GPU с&nbsp;помощью флага `--gpus=all`.
После создания запускать и останавливать контейнер `ollama` можно так:
После создания запускать и&nbsp;останавливать контейнер `ollama` можно так:
```
docker start ollama
docker stop ollama
```
Контейнер предоставляет доступ к [Ollama API](https://github.com/jmorganca/ollama/blob/main/docs/api.md) на 11434 порту, а также позволяет устанавливать и общаться с установленными LLM через терминал.
Контейнер предоставляет доступ к&nbsp;[Ollama API](https://github.com/jmorganca/ollama/blob/main/docs/api.md) на&nbsp;11434&nbsp;порту, а&nbsp;также позволяет устанавливать и&nbsp;общаться с&nbsp;установленными LLM через терминал.
<div id='setup-model'></div>
### Загрузка модели и диалог с ней
### Загрузка модели и&nbsp;диалог с&nbsp;ней
Ollama позволяет запускать любые GGUF, PyTorch или Safetensors модели (что бы это ни значило), но самый простой путь - загрузка моделей из специальной [библиотеки](https://ollama.ai/library).
Ollama позволяет запускать любые GGUF, PyTorch или Safetensors модели (что&nbsp;бы это ни&nbsp;значило), но&nbsp;самый простой путь&nbsp;— загрузка моделей из&nbsp;специальной [библиотеки](https://ollama.ai/library).
Для того, чтобы скачать модель и начать с ней диалог, нужно выполнить команду:
Для того, чтобы скачать модель и&nbsp;начать с&nbsp;ней диалог, нужно выполнить команду:
```
docker exec -it ollama ollama run mistral
```
Вместо `mistral` от одноимённой комании можно выбрать любую другую модель из библиотеки, например, легкую `phi` от Microsoft Research.
Вместо `mistral` от&nbsp;одноимённой комании можно выбрать любую другую модель из&nbsp;библиотеки, например, легкую `phi` от&nbsp;Microsoft Research.
Кроме `run` доступны также `list`, `pull` и `rm` для просмотра списка, скачивания и удаления моделей соответственно.
Кроме `run` доступны также `list`, `pull` и&nbsp;`rm` для просмотра списка, скачивания и&nbsp;удаления моделей соответственно.
Чтобы не писать такие длинные заклинания каждый раз, я добавил в `.zshrc` пару алиасов:
Чтобы не&nbsp;писать такие длинные заклинания каждый раз, я&nbsp;добавил в&nbsp;`.zshrc` пару алиасов:
```
alias summonable='docker exec -it ollama ollama list'
alias summon='clear && docker exec -it ollama ollama run'
```
Теперь можно смотреть на список установленных моделей и запускать диалог с выбранной:
Теперь можно смотреть на&nbsp;список установленных моделей и&nbsp;запускать диалог с&nbsp;выбранной:
```
summonable
summon phi
```
<div id='custom-model'></div>
### Кастомные модели и их тонкая настройка
### Кастомные модели и&nbsp;их&nbsp;тонкая настройка
Ollama позволяет на основе существующих создавать производные модели с заранее определёнными инструкциями или параметрами. Для этого нужно создать специальный файл, в котором указана родительская модель и определены желаемые значения параметров. Подробнее о формате этих файлов можно прочесть в документации: [Modelfile](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md).
Ollama позволяет на&nbsp;основе существующих создавать производные модели с&nbsp;заранее определёнными инструкциями или параметрами. Для этого нужно создать специальный файл, в&nbsp;котором указана родительская модель и&nbsp;определены желаемые значения параметров. Подробнее о&nbsp;формате этих файлов можно прочесть в&nbsp;документации: [Modelfile](https://github.com/jmorganca/ollama/blob/main/docs/modelfile.md).
Чтобы посмотреть, как должен выглядеть Modelfile, можно посетить [OllamaHub](https://ollamahub.com/) от разработчиков стороннего [Ollama Web UI](https://github.com/ollama-webui/ollama-webui/). На сайте есть [примеры очень тонкой настройки множества параметров](https://ollamahub.com/m/smoothbrainape/hu-tao:latest) модели для соответствия образу конкретного персонажа, но в качестве образца я буду использовать небольшой [English Teacher Modelfile](https://ollamahub.com/m/kamjin/english-teacher:latest):
Чтобы посмотреть, как должен выглядеть Modelfile, можно посетить [OllamaHub](https://ollamahub.com/) от&nbsp;разработчиков стороннего [Ollama Web UI](https://github.com/ollama-webui/ollama-webui/). На&nbsp;сайте есть [примеры очень тонкой настройки множества параметров](https://ollamahub.com/m/smoothbrainape/hu-tao:latest) модели для соответствия образу конкретного персонажа, но&nbsp;в&nbsp;качестве образца я&nbsp;буду использовать небольшой [English Teacher Modelfile](https://ollamahub.com/m/kamjin/english-teacher:latest):
#### EnglishTeacher.Modelfile
```
@ -116,9 +116,9 @@ You should always take the initiative to correct my mistakes in grammar and voca
"""
```
Вообще, для загрузки кастомной модели достаточно выполнить команду `create`, но в случае использования Ollama внутри docker-контейнера возникает необходимость каким-то образом файл с моделью в этот контейнер передать.
Вообще, для загрузки кастомной модели достаточно выполнить команду `create`, но&nbsp;в&nbsp;случае использования Ollama внутри docker-контейнера возникает необходимость каким-то образом файл с&nbsp;моделью в&nbsp;этот контейнер передать.
Для решения этой проблемы я набросал небольшой bash-скрипт:
Для решения этой проблемы я&nbsp;набросал небольшой bash-скрипт:
#### applyModelfile.bash
```bash
@ -154,7 +154,7 @@ clear
docker exec -it ollama ollama create $modelName -f $targetPath
```
Этот скрипт нужно поместить по соседству с директорией `models` и сделать исполняемым с помощью `chmod +x applyModelfile.bash`.
Этот скрипт нужно поместить по&nbsp;соседству с&nbsp;директорией `models` и&nbsp;сделать исполняемым с&nbsp;помощью `chmod +x applyModelfile.bash`.
Должна получиться примерно такая структура:
```
├── models
@ -162,7 +162,7 @@ docker exec -it ollama ollama create $modelName -f $targetPath
└── applyModelfile.bash
```
После этого модель можно загрузить в контейнер и начать с ней диалог:
После этого модель можно загрузить в&nbsp;контейнер и&nbsp;начать с&nbsp;ней диалог:
```
./applyModelfile.bash EnglishTeacher
summon EnglishTeacher
@ -172,21 +172,21 @@ summon EnglishTeacher
## Использование
Разговоры с галлюцинирующим искусственным интеллектом в терминале - это, конечно, волшебно, но потенциал больших языковых моделeй по-настоящему раскрывается, когда они начинают портить данные в соседних приложениях!
Разговоры с&nbsp;галлюцинирующим искусственным интеллектом в&nbsp;терминале&nbsp;— это, конечно, волшебно, но&nbsp;потенциал больших языковых моделeй по-настоящему раскрывается, когда они начинают портить данные в&nbsp;соседних приложениях!
В [GitHub-репозитории Ollama](https://github.com/jmorganca/ollama#community-integrations) можно найти ссылки на множество веб-интерфейсов, библиотек и плагинов для текстовых редакторов и прочих Obsidian'ов.
В&nbsp;[GitHub-репозитории Ollama](https://github.com/jmorganca/ollama#community-integrations) можно найти ссылки на&nbsp;множество веб-интерфейсов, библиотек и&nbsp;плагинов для текстовых редакторов и&nbsp;прочих Obsidian'ов.
Не ручаюсь за весь список, но расскажу про то, с чем экспериментировал сам.
Не&nbsp;ручаюсь за&nbsp;весь список, но&nbsp;расскажу про то, с&nbsp;чем экспериментировал сам.
<div id='fake-open-ai'></div>
### Мимикрия под API от OpenAI
### Мимикрия под API от&nbsp;OpenAI
API Ollama используется в меньшем числе продуктов, чем API от OpenAI. К счастью, это не проблема: с помощью прокси-прослойки под названием [LiteLLM](https://github.com/BerriAI/litellm) можно сделать их совместимыми. Инструкция по установке и использованию в общем случае есть в репозитории и довольно тривиальна, но мне опять потребовалось немного кода, чтобы заставить их работать вместе на моих условиях.
API Ollama используется в&nbsp;меньшем числе продуктов, чем API от&nbsp;OpenAI. К&nbsp;счастью, это не&nbsp;проблема: с&nbsp;помощью прокси-прослойки под названием [LiteLLM](https://github.com/BerriAI/litellm) можно сделать их&nbsp;совместимыми. Инструкция по&nbsp;установке и&nbsp;использованию в&nbsp;общем случае есть в&nbsp;репозитории и&nbsp;довольно тривиальна, но&nbsp;мне опять потребовалось немного кода, чтобы заставить их&nbsp;работать вместе на&nbsp;моих условиях.
Я хотел, чтобы LiteLLM-прокси и Ollama работали на разных компьтерах, и не хотел ставить pip-пакеты в систему. В результате родилось решение из docker-файла с хаками и скрипта, который в нём запускается. Я не специалист в написании docker-файлов, так что уверен в неоптимальности финального решения. Точно можно и нужно обойтись без `run --net=host` и отдельного скрипта, например.
Я&nbsp;хотел, чтобы LiteLLM-прокси и&nbsp;Ollama работали на&nbsp;разных компьтерах, и&nbsp;не&nbsp;хотел ставить pip-пакеты в&nbsp;систему. В&nbsp;результате родилось решение из&nbsp;docker-файла с&nbsp;хаками и&nbsp;скрипта, который в&nbsp;нём запускается. Я&nbsp;не&nbsp;специалист в&nbsp;написании docker-файлов, так что уверен в&nbsp;неоптимальности финального решения. Точно можно и&nbsp;нужно обойтись без `run --net=host` и&nbsp;отдельного скрипта, например.
Несмотря на костыльность связки, она справляется со своей задачей:
Несмотря на&nbsp;костыльность связки, она справляется со&nbsp;своей задачей:
#### Dockerfile
```Dockerfile
@ -213,24 +213,24 @@ pip install litellm
litellm --model ollama/mistral --api_base http://ollama.internal:11434 --drop_params
```
Собрать и запустить docker-контейнер можно с помощью этих двух команд:
Собрать и&nbsp;запустить docker-контейнер можно с&nbsp;помощью этих двух команд:
```sh
docker build -t diy-ollama-proxy .
docker run --net=host diy-ollama-proxy
```
После запуска вы получите API, который совместим с API от OpenAI и доступен по адресу `http://localhost:8000/`.
После запуска вы&nbsp;получите API, который совместим с&nbsp;API от&nbsp;OpenAI и&nbsp;доступен по&nbsp;адресу `http://localhost:8000/`.
<div id='ollama-nvim'></div>
### Интеграция с NeoVim
### Интеграция с&nbsp;NeoVim
Языковые модели отлично умеют взаимодействовать с текстом, так что использование их в текстовом редакторе кажется разумной идеей.
Языковые модели отлично умеют взаимодействовать с&nbsp;текстом, так что использование их&nbsp;в&nbsp;текстовом редакторе кажется разумной идеей.
Мне не очень нравится идея Copilot, который зачем-то постоянно подсовывает тебе странные куски кода. Я пробовал использовать [Codeium](https://codeium.com/) в ручном режиме, но оказалось, что странные куски кода по запросу мне тоже не очень нужны. Гораздо более привлекательной мне кажется возможность выделить существующий фрагмент текста или кода и попросить бездушную машину что-нибудь с ним сделать: упростить, дополнить, изменить или даже перевести с одного языка на другой. Идеальным для такого подхода оказался [плагин ollama.nvim](https://github.com/nomnivore/ollama.nvim).
Мне не&nbsp;очень нравится идея Copilot, который зачем-то постоянно подсовывает тебе странные куски кода. Я&nbsp;пробовал использовать [Codeium](https://codeium.com/) в&nbsp;ручном режиме, но&nbsp;оказалось, что странные куски кода по&nbsp;запросу мне тоже не&nbsp;очень нужны. Гораздо более привлекательной мне кажется возможность выделить существующий фрагмент текста или кода и&nbsp;попросить бездушную машину что-нибудь с&nbsp;ним сделать: упростить, дополнить, изменить или даже перевести с&nbsp;одного языка на&nbsp;другой. Идеальным для такого подхода оказался [плагин ollama.nvim](https://github.com/nomnivore/ollama.nvim).
Кроме того, что он поддерживает кастомные промпты (в том числе интерактивные), он позволил мне обращаться к LLM, которая запущена на другом компьютере в локальной сети (для удобства я указал его адрес в `/etc/hosts/`).
Кроме того, что он&nbsp;поддерживает кастомные промпты (в&nbsp;том числе интерактивные), он&nbsp;позволил мне обращаться к&nbsp;LLM, которая запущена на&nbsp;другом компьютере в&nbsp;локальной сети (для удобства я&nbsp;указал его адрес в&nbsp;`/etc/hosts/`).
Установка и настройка с использованием пакетного менеджера lazy.nvim выглядит примерно так:
Установка и&nbsp;настройка с&nbsp;использованием пакетного менеджера lazy.nvim выглядит примерно так:
```
{
'nomnivore/ollama.nvim',
@ -278,63 +278,63 @@ docker run --net=host diy-ollama-proxy
},
```
В этом конфиге я выключил несколько дефолтных промптов и добавил несколько своих:
- `Improve_Text` заменяет выделенный кусок текста "улучшенным".
- `Modify_Text` является аналогом встроенного `Modify_Code` и позволяет делать с выделенным текстом всякие глупости. Например, заменить все числа на слова.
- `Use_Selection_as_Prompt` просто заменяет выделенный текст на ответ от LLM.
В&nbsp;этом конфиге я&nbsp;выключил несколько дефолтных промптов и&nbsp;добавил несколько своих:
- `Improve_Text` заменяет выделенный кусок текста «улучшенным».
- `Modify_Text` является аналогом встроенного `Modify_Code` и&nbsp;позволяет делать с&nbsp;выделенным текстом всякие глупости. Например, заменить все числа на&nbsp;слова.
- `Use_Selection_as_Prompt` просто заменяет выделенный текст на&nbsp;ответ от&nbsp;LLM.
В итоге получается два сценария использования, оба доступны по `<leader> + j`:
- В `normal` mode плагин спрашивает меня, какой код мне нужен, и вставляет его.
- В `visual` mode появляется меню действий над выделенным текстом.
В&nbsp;итоге получается два сценария использования, оба доступны по&nbsp;`<leader> + j`:
- В&nbsp;`normal` mode плагин спрашивает меня, какой код мне нужен, и&nbsp;вставляет его.
- В&nbsp;`visual` mode появляется меню действий над выделенным текстом.
Как видно из конфига, я использую только `mistral`, но можно указать модель для кажого промпта и делегировать, например, манипуляции над кодом `codellama`, а операции над текстом - `llama2`.
Как видно из&nbsp;конфига, я&nbsp;использую только `mistral`, но&nbsp;можно указать модель для кажого промпта и&nbsp;делегировать, например, манипуляции над кодом `codellama`, а&nbsp;операции над текстом&nbsp;— `llama2`.
Возможность добавления кастомных промптов позволяет в будущем реализовать новые сценарии или вынести повторяющиеся действия в отдельный пункт меню или даже на отдельный шорткат.
Возможность добавления кастомных промптов позволяет в&nbsp;будущем реализовать новые сценарии или вынести повторяющиеся действия в&nbsp;отдельный пункт меню или даже на&nbsp;отдельный шорткат.
<div id='update-delete'></div>
## Обновление и удаление
## Обновление и&nbsp;удаление
Для обновления и удаления моделей можно использовать команды `pull` и `rm`:
Для обновления и&nbsp;удаления моделей можно использовать команды `pull` и&nbsp;`rm`:
```
docker exec -it ollama ollama pull mixtral
docker exec -it ollama ollama rm mistral
docker exec -it ollama ollama rm&nbsp;mistral
```
Я знаю, что для обновления и удаления docker-образов и docker-контейнеров тоже есть специальные команды (это тоже `pull` и `rm`), но каждый раз ленюсь в этом разобраться, просто сношу всё с помощью утилиты [sen](https://github.com/TomasTomecek/sen) и разворачиваю нужное заново.
Я&nbsp;знаю, что для обновления и&nbsp;удаления docker-образов и&nbsp;docker-контейнеров тоже есть специальные команды (это тоже `pull` и&nbsp;`rm`), но&nbsp;каждый раз ленюсь в&nbsp;этом разобраться, просто сношу всё с&nbsp;помощью утилиты [sen](https://github.com/TomasTomecek/sen) и&nbsp;разворачиваю нужное заново.
<div id='performance'></div>
## Производительность
Для эксплуатации LLM требуется гораздо меньше ресурсов, чем для её обучения. Запустить 7b-модель средней тупости можно практически на любом CPU и 8 GB RAM, но нагрузка на систему и скорость генерации ответов часто будут далеки от комфортных значений.
Для эксплуатации LLM требуется гораздо меньше ресурсов, чем для её&nbsp;обучения. Запустить 7b-модель средней тупости можно практически на&nbsp;любом CPU и&nbsp;8&nbsp;GB&nbsp;RAM, но&nbsp;нагрузка на&nbsp;систему и&nbsp;скорость генерации ответов часто будут далеки от&nbsp;комфортных значений.
Например, на моём немолодом Intel Core i7-10510U @ 8x 4.9GHz неаккуратный запрос к `llama2` может заставить систему шуршать вентиляторами пару-тройку минут. При этом `phi` на этом же процессоре способна отвечать на какие-нибудь не очень сложные вопросы практически мгновенно.
Например, на&nbsp;моём немолодом Intel Core i7-10510U @ 8x 4.9GHz неаккуратный запрос к&nbsp;`llama2` может заставить систему шуршать вентиляторами пару-тройку минут. При этом `phi` на&nbsp;этом&nbsp;же процессоре способна отвечать на&nbsp;какие-нибудь не&nbsp;очень сложные вопросы практически мгновенно.
К счастью, у меня случайно завалялся MacBook на процессоре M1 и он уже показывает куда более впечатляющие результаты. `Mistral` даже на непростые запросы отвечает за считанные секунды, а в режиме чата токены вылетают на экран заметно быстрее, чем в веб-интерфейсе ChatGPT.
К&nbsp;счастью, у&nbsp;меня случайно завалялся MacBook на&nbsp;процессоре M1&nbsp;и&nbsp;он&nbsp;уже показывает куда более впечатляющие результаты. `Mistral` даже на&nbsp;непростые запросы отвечает за&nbsp;считанные секунды, а&nbsp;в&nbsp;режиме чата токены вылетают на&nbsp;экран заметно быстрее, чем в&nbsp;веб-интерфейсе ChatGPT.
Неприятным открытием стало то, что docker-версия Ollama на MacOS выполняется заметно медленнее (от 3 до 5 раз, если верить ощущениям), чем нативная. Возможно, всё дело в том, что я как-то неправильно настроил docker или приложение в контейнере нужно запускать с какими-нибудь специальными флагами для максимальной утилизации ресурсов. В любом случае, к порядку на этом ноутбуке я отношусь гораздо менее трепетно, поэтому просто установил и использую приложение с сайта Ollama.
Неприятным открытием стало то, что docker-версия Ollama на&nbsp;MacOS выполняется заметно медленнее (от&nbsp;3&nbsp;до&nbsp;5&nbsp;раз, если верить ощущениям), чем нативная. Возможно, всё дело в&nbsp;том, что я&nbsp;как-то неправильно настроил docker или приложение в&nbsp;контейнере нужно запускать с&nbsp;какими-нибудь специальными флагами для максимальной утилизации ресурсов. В&nbsp;любом случае, к&nbsp;порядку на&nbsp;этом ноутбуке я&nbsp;отношусь гораздо менее трепетно, поэтому просто установил и&nbsp;использую приложение с&nbsp;сайта Ollama.
<div id='why'></div>
## Зачем всё это нужно?
Конечно, GhatGPT умнее и умеет из коробки гораздо больше.<br>
Конечно, GhatGPT умнее и&nbsp;умеет из&nbsp;коробки гораздо больше.<br>
Конечно, ChatGPT требует меньше телодвижений для использования.<br>
Конечно, самые умные модели требуют внушительных ресурсов, ведь для запуска нашумевшей [mixtral](https://ollama.ai/library/mixtral) или аналогичной модели нужно иметь 48 Gb оперативной памяти.<br>
Кончено, сидя в кафе задать вопрос Bard от Google гораздо проще, чем достучаться до модели в закрытом ноутбуке, который остался дома.<br>
Конечно, самые умные модели требуют внушительных ресурсов, ведь для запуска нашумевшей [mixtral](https://ollama.ai/library/mixtral) или аналогичной модели нужно иметь 48&nbsp;Gb&nbsp;оперативной памяти.<br>
Кончено, сидя в&nbsp;кафе задать вопрос Bard от&nbsp;Google гораздо проще, чем достучаться до&nbsp;модели в&nbsp;закрытом ноутбуке, который остался дома.<br>
Я всё это прекрасно понимаю, но ничего из этого не стоит того, чтобы добровольно ставить себя в зависимость от монополистов с их закрытыми чёрными ящиками.
Я&nbsp;всё это прекрасно понимаю, но&nbsp;ничего из&nbsp;этого не&nbsp;стоит того, чтобы добровольно ставить себя в&nbsp;зависимость от&nbsp;монополистов с&nbsp;их&nbsp;закрытыми чёрными ящиками.
Даже если закрыть глаза на все идеологические вопросы, то любая локальная LLM отличается от любого облачного провайдера тем, что:
- Может работать в оффлайне.
- Не хранит и не сливает вашу переписку.
- Не станет завтра тупее, чем есть сегодня.
- Не забанит тебя за возмутивший кого-то там запрос.
- Обладает тем уровнем цензуры, который выбрал ты сам.
Даже если закрыть глаза на&nbsp;все идеологические вопросы, то&nbsp;любая локальная LLM отличается от&nbsp;любого облачного провайдера тем, что:
- Может работать в&nbsp;оффлайне.
- Не&nbsp;хранит и&nbsp;не&nbsp;сливает вашу переписку.
- Не&nbsp;станет завтра тупее, чем есть сегодня.
- Не&nbsp;забанит тебя за&nbsp;возмутивший кого-то там запрос.
- Обладает тем уровнем цензуры, который выбрал ты&nbsp;сам.
Я искренне рад, что для доступа даже к передовым технологиям, всё ещё не обязательно поступаться своей приватностью и своими свободами.
Я&nbsp;искренне рад, что для доступа даже к&nbsp;передовым технологиям, всё ещё не&nbsp;обязательно поступаться своей приватностью и&nbsp;своими свободами.
---
При написании этого поста не была использована ни одна LLM =)
При написании этого поста не&nbsp;была использована ни&nbsp;одна LLM =)