<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ollama &amp;mdash; Цифровой дворник</title>
    <link>https://articles.clr58.ru/tag:ollama</link>
    <description>Практические заметки о сетях, self-hosting, виртуализации, мониторинге, автоматизации и локальном ИИ.</description>
    <pubDate>Wed, 30 Sep 2026 01:17:22 +0000</pubDate>
    <item>
      <title>Локальный инференс на встроенной AMD-графике: ROCm-хак и честные токены в секунду</title>
      <link>https://articles.clr58.ru/ai-series-03</link>
      <description>&lt;![CDATA[Обложка&#xA;&#xA;У меня в лабе живёт мини-ПК на AMD Phoenix: внутри встроенная графика Radeon 760M (ядро gfx1103), 16 ГБ общей памяти, и ни одной дискретной карты. На первый взгляд — что там гонять, это же iGPU от ноутбучного кристалла. Но у него есть то, чего нет у процессора: настоящий GPU-пайплайн и прямой доступ к общему куску быстрой памяти. А у меня давно чесалось запустить локальную LLM — без аренды видеокарты в облаке и без отправки своих вопросов на чужие серверы.&#xA;&#xA;Спойлер: завелось и работает. Но не так, как обещают красивые посты «локальный DeepSeek за пять минут на любом железе». Давайте по порядку — боль, решение, честные цифры и грабли.&#xA;&#xA;Зачем вообще локально&#xA;&#xA;Сначала про мотивацию, потому что без неё весь этот геморрой выглядит бессмысленным. Локальная модель — это три вещи. Первое: приватность, вопросы не уезжают в чужое облако. Второе: нет счётчика за токены, гоняешь сколько влезет. Третье: она не падает вместе с API-провайдером и не ловит лимиты в час пик. Для рутины и черновиков этого достаточно. А вот для vision, тяжёлых агентов и огромных контекстов — уже нет, но об этом ниже.&#xA;&#xA;Боль: AMD в контейнере — отдельный вид спорта&#xA;&#xA;У Nvidia в контейнерах всё отлажено годами: пробросил /dev/nvidia*, поставил nvidia-container-toolkit — поехало. У AMD за это отвечает протокол ROCm. Под дискретные карты он ещё как-то жил, а вот встроенная графика долго числилась пасынком: официально gfx1103 в ROCm не значится, поддержки «из коробки» нет.&#xA;&#xA;Вторая проблема — окружение. Я держу всё в LXC-контейнерах под Proxmox, а не в голом Docker на хосте. LXC — это не виртуалка и не докер: устройств из коробки не видно, udev внутри не рулит, права на /dev надо городить руками. То есть классического «развернул и забыл» тут не будет в принципе. Каждый шаг — ручная настройка.&#xA;&#xA;Проброс устройств: три ноды и никакой магии&#xA;&#xA;Внутри контейнера Ollama должен увидеть три устройства:&#xA;&#xA;/dev/dri/renderD128 — вычислительный узел рендера, именно через него идут вычисления;&#xA;/dev/dri/card0 — карта как устройство отображения;&#xA;/dev/kfd — Kernel Fusion Driver, дверь в ROCm-стек.&#xA;&#xA;Проброс на Proxmox делается одной командой через pct set:&#xA;&#xA;pct set 107 -dev0 /dev/dri/renderD128 -dev1 /dev/dri/card0 -dev2 /dev/kfd&#xA;&#xA;Устройства в контейнере появятся, но права по умолчанию будут root. А Ollama у меня бегает не от root — и без прав на эти ноды он упадёт на первой же секунде. Внутри LXC не работает udev, поэтому выставляю права через tmpfiles.d: правило отрабатывает при старте контейнера и раздаёт владельца и группу:&#xA;&#xA;/etc/tmpfiles.d/gpu.conf&#xA;z /dev/dri/renderD128 0666 root render -&#xA;z /dev/dri/card0      0666 root video  -&#xA;z /dev/kfd           0666 root render -&#xA;&#xA;Всё, сервис видит железо. Но само железо ещё «не говорит по-человечески».&#xA;&#xA;ROCm-хак: выдаём gfx1103 за gfx1100&#xA;&#xA;Вот ради чего пост называется «хаком». Встроенная графика в моём кристалле — gfx1103, и ROCm её официально не знает. Но архитектурно gfx1103 — почти близнец дискретного gfx1100, ядра той же линейки RDNA3. В ROCm есть переменная, которая подменяет идентификатор GPU для драйвера:&#xA;&#xA;HSAOVERRIDEGFXVERSION=11.0.0&#xA;&#xA;«Прикинься gfx1100» — и стек начинает грузить ядра для него. Плюс вторая переменная, которая говорит Ollama, что на встроенную графику можно:&#xA;&#xA;OLLAMAIGPUENABLE=1&#xA;&#xA;Обе вешаю через drop-in юнита, чтобы не трогать сам systemd-файл сервиса:&#xA;&#xA;/etc/systemd/system/ollama.service.d/gpu.conf&#xA;[Service]&#xA;Environment=HSAOVERRIDEGFXVERSION=11.0.0&#xA;Environment=OLLAMAIGPUENABLE=1&#xA;&#xA;daemon-reload, рестарт сервиса — и смотрим, подхватилась ли карта.&#xA;&#xA;Честные цифры: что реально получилось&#xA;&#xA;Сначала убеждаюсь, что инференс реально ушёл на GPU, а не молотится на CPU втихаря. ollama ps показывает процессор, на котором крутится модель, и там красуется:&#xA;&#xA;PROCESSOR  100% GPU&#xA;&#xA;Это самый приятный момент во всей истории — когда после пары часов ковыряния видишь, что встроенная графика честно тянет модель, а не процессор делает вид. Теперь цифры.&#xA;&#xA;gemma3:12b — основная рабочая лошадка:&#xA;&#xA;8,1 ГБ на диске;&#xA;8,0 ГБ в видеопамяти;&#xA;14,8 токена/сек;&#xA;контекст 131072 токена.&#xA;&#xA;gemma3:4b — запасная:&#xA;&#xA;3,3 ГБ;&#xA;23,5 токена/сек;&#xA;контекст 32768.&#xA;&#xA;Для сравнения был ещё fp16-вариант — и он разочаровал: те же 8,1 ГБ видеопамяти, но всего 8,1 ток/сек. Вдвое дороже по ресурсам, вдвое медленнее, а прироста качества на глаз ноль. Выкинул без сожалений.&#xA;&#xA;Важная деталь: у встроенной графики нет своей выделенной видеопамяти, она заимствует её у общей системной. Поэтому 8 ГБ «VRAM» — это те же 8 ГБ из 16 ГБ оперативки. Модель на 12b сюда влезает впритык, а на 16b уже не хватило бы с запасом на контекст. Это и есть главный потолок iGPU — не скорость, а память.&#xA;&#xA;14–24 токена в секунду — это не «вау, летает». Это уровень «читает примерно с той же скоростью, что и я»: ответы не мгновенные, но и не бесконечные. Для локального помощника, которому задал вопрос и ждёшь абзац, — комфортно. Для потоковой генерации больших текстов — уже на грани.&#xA;&#xA;Где ожидания врут&#xA;&#xA;Вот тут самое важное. Картинка «завёл локальный LLM на iGPU и получил бесплатного ChatGPT» красивая, но в ней три жирные оговорки.&#xA;&#xA;Вижн не работает. Ни на одной модели. CLIP-энкодер, который разбирает картинки перед подачей в модель, на ROCm gfx1100 просто падает. Картинки в этой связке — только через облачную vision-модель, и точка.&#xA;&#xA;Длинные промпты роняют 12b. Скармливаешь конфиг или документ больше 10 КБ — gemma3:12b улетает с CUBLASSTATUSINTERNALERROR. Короткие промпты стабильны, длинные — русская рулетка. Младшая gemma3:4b длинные тексты, кстати, переваривает (30 КБ тянет), но медленно и с маленьким окном контекста.&#xA;&#xA;8B-модели не годятся в агентский режим. Пробовал hermes3:8b и llama3.1:8b в роли субагентов, которые должны ходить по инструментам и писать отчёты, — вместо отчёта получал мусор. Удалил с диска. Локально хорошо работает «ответь на вопрос», а не «пойди и сделай».&#xA;&#xA;Итого: встроенная AMD-графика — это честный локальный инференс для приватных вопросов, черновиков и простой рутины. Но не замена облачному vision, не площадка для тяжёлых агентов и не бесконечное окно контекста. Знать это заранее — половина успеха, чтобы потом не расстраиваться.&#xA;&#xA;Итог&#xA;&#xA;Если у вас мини-ПК на свежем AMD и хочется попробовать локальную LLM без вложений в видеокарту — заводится. Рецепт: пробросить три устройства в контейнер, выставить права через tmpfiles.d, подменить gfx1103 на gfx1100 переменной HSAOVERRIDEGFXVERSION и разрешить iGPU через OLLAMAIGPUENABLE. Дальше — смотреть на PROCESSOR 100% GPU и радоваться, что вопросы больше не уезжают в чужое облако.&#xA;&#xA;Просто помните: это iGPU, а не дата-центр. 15–24 токена в секунду, без вижна, с капризами на длинных промптах и потолком в 16 ГБ общей памяти. Зато бесплатно, приватно и — после пары часов мата — стабильно.&#xA;&#xA;Теги: #llm #ollama #rocm #selfhosting&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://paste.clr58.ru/post-ai-03-cover-digclean.jpg" alt="Обложка"></p>

<p>У меня в лабе живёт мини-ПК на AMD Phoenix: внутри встроенная графика Radeon 760M (ядро gfx1103), 16 ГБ общей памяти, и ни одной дискретной карты. На первый взгляд — что там гонять, это же iGPU от ноутбучного кристалла. Но у него есть то, чего нет у процессора: настоящий GPU-пайплайн и прямой доступ к общему куску быстрой памяти. А у меня давно чесалось запустить локальную LLM — без аренды видеокарты в облаке и без отправки своих вопросов на чужие серверы.</p>

<p>Спойлер: завелось и работает. Но не так, как обещают красивые посты «локальный DeepSeek за пять минут на любом железе». Давайте по порядку — боль, решение, честные цифры и грабли.</p>

<h2 id="зачем-вообще-локально">Зачем вообще локально</h2>

<p>Сначала про мотивацию, потому что без неё весь этот геморрой выглядит бессмысленным. Локальная модель — это три вещи. Первое: приватность, вопросы не уезжают в чужое облако. Второе: нет счётчика за токены, гоняешь сколько влезет. Третье: она не падает вместе с API-провайдером и не ловит лимиты в час пик. Для рутины и черновиков этого достаточно. А вот для vision, тяжёлых агентов и огромных контекстов — уже нет, но об этом ниже.</p>

<h2 id="боль-amd-в-контейнере-отдельный-вид-спорта">Боль: AMD в контейнере — отдельный вид спорта</h2>

<p>У Nvidia в контейнерах всё отлажено годами: пробросил <code>/dev/nvidia*</code>, поставил nvidia-container-toolkit — поехало. У AMD за это отвечает протокол ROCm. Под дискретные карты он ещё как-то жил, а вот встроенная графика долго числилась пасынком: официально gfx1103 в ROCm не значится, поддержки «из коробки» нет.</p>

<p>Вторая проблема — окружение. Я держу всё в LXC-контейнерах под Proxmox, а не в голом Docker на хосте. LXC — это не виртуалка и не докер: устройств из коробки не видно, udev внутри не рулит, права на <code>/dev</code> надо городить руками. То есть классического «развернул и забыл» тут не будет в принципе. Каждый шаг — ручная настройка.</p>

<h2 id="проброс-устройств-три-ноды-и-никакой-магии">Проброс устройств: три ноды и никакой магии</h2>

<p>Внутри контейнера Ollama должен увидеть три устройства:</p>
<ul><li><code>/dev/dri/renderD128</code> — вычислительный узел рендера, именно через него идут вычисления;</li>
<li><code>/dev/dri/card0</code> — карта как устройство отображения;</li>
<li><code>/dev/kfd</code> — Kernel Fusion Driver, дверь в ROCm-стек.</li></ul>

<p>Проброс на Proxmox делается одной командой через <code>pct set</code>:</p>

<pre><code class="language-text">pct set 107 -dev0 /dev/dri/renderD128 -dev1 /dev/dri/card0 -dev2 /dev/kfd
</code></pre>

<p>Устройства в контейнере появятся, но права по умолчанию будут <code>root</code>. А Ollama у меня бегает не от root — и без прав на эти ноды он упадёт на первой же секунде. Внутри LXC не работает udev, поэтому выставляю права через tmpfiles.d: правило отрабатывает при старте контейнера и раздаёт владельца и группу:</p>

<pre><code class="language-text"># /etc/tmpfiles.d/gpu.conf
z /dev/dri/renderD128 0666 root render -
z /dev/dri/card0      0666 root video  -
z /dev/kfd           0666 root render -
</code></pre>

<p>Всё, сервис видит железо. Но само железо ещё «не говорит по-человечески».</p>

<h2 id="rocm-хак-выдаём-gfx1103-за-gfx1100">ROCm-хак: выдаём gfx1103 за gfx1100</h2>

<p>Вот ради чего пост называется «хаком». Встроенная графика в моём кристалле — gfx1103, и ROCm её официально не знает. Но архитектурно gfx1103 — почти близнец дискретного gfx1100, ядра той же линейки RDNA3. В ROCm есть переменная, которая подменяет идентификатор GPU для драйвера:</p>

<pre><code class="language-text">HSA_OVERRIDE_GFX_VERSION=11.0.0
</code></pre>

<p>«Прикинься gfx1100» — и стек начинает грузить ядра для него. Плюс вторая переменная, которая говорит Ollama, что на встроенную графику можно:</p>

<pre><code class="language-text">OLLAMA_IGPU_ENABLE=1
</code></pre>

<p>Обе вешаю через drop-in юнита, чтобы не трогать сам systemd-файл сервиса:</p>

<pre><code class="language-text"># /etc/systemd/system/ollama.service.d/gpu.conf
[Service]
Environment=HSA_OVERRIDE_GFX_VERSION=11.0.0
Environment=OLLAMA_IGPU_ENABLE=1
</code></pre>

<p><code>daemon-reload</code>, рестарт сервиса — и смотрим, подхватилась ли карта.</p>

<h2 id="честные-цифры-что-реально-получилось">Честные цифры: что реально получилось</h2>

<p>Сначала убеждаюсь, что инференс реально ушёл на GPU, а не молотится на CPU втихаря. <code>ollama ps</code> показывает процессор, на котором крутится модель, и там красуется:</p>

<pre><code class="language-text">PROCESSOR  100% GPU
</code></pre>

<p>Это самый приятный момент во всей истории — когда после пары часов ковыряния видишь, что встроенная графика честно тянет модель, а не процессор делает вид. Теперь цифры.</p>

<p><strong>gemma3:12b</strong> — основная рабочая лошадка:</p>
<ul><li>8,1 ГБ на диске;</li>
<li>8,0 ГБ в видеопамяти;</li>
<li><strong>14,8 токена/сек</strong>;</li>
<li>контекст 131072 токена.</li></ul>

<p><strong>gemma3:4b</strong> — запасная:</p>
<ul><li>3,3 ГБ;</li>
<li><strong>23,5 токена/сек</strong>;</li>
<li>контекст 32768.</li></ul>

<p>Для сравнения был ещё <strong>fp16-вариант</strong> — и он разочаровал: те же 8,1 ГБ видеопамяти, но всего 8,1 ток/сек. Вдвое дороже по ресурсам, вдвое медленнее, а прироста качества на глаз ноль. Выкинул без сожалений.</p>

<p>Важная деталь: у встроенной графики нет своей выделенной видеопамяти, она заимствует её у общей системной. Поэтому 8 ГБ «VRAM» — это те же 8 ГБ из 16 ГБ оперативки. Модель на 12b сюда влезает впритык, а на 16b уже не хватило бы с запасом на контекст. Это и есть главный потолок iGPU — не скорость, а память.</p>

<p>14–24 токена в секунду — это не «вау, летает». Это уровень «читает примерно с той же скоростью, что и я»: ответы не мгновенные, но и не бесконечные. Для локального помощника, которому задал вопрос и ждёшь абзац, — комфортно. Для потоковой генерации больших текстов — уже на грани.</p>

<h2 id="где-ожидания-врут">Где ожидания врут</h2>

<p>Вот тут самое важное. Картинка «завёл локальный LLM на iGPU и получил бесплатного ChatGPT» красивая, но в ней три жирные оговорки.</p>

<p><strong>Вижн не работает.</strong> Ни на одной модели. CLIP-энкодер, который разбирает картинки перед подачей в модель, на ROCm gfx1100 просто падает. Картинки в этой связке — только через облачную vision-модель, и точка.</p>

<p><strong>Длинные промпты роняют 12b.</strong> Скармливаешь конфиг или документ больше 10 КБ — gemma3:12b улетает с <code>CUBLAS_STATUS_INTERNAL_ERROR</code>. Короткие промпты стабильны, длинные — русская рулетка. Младшая gemma3:4b длинные тексты, кстати, переваривает (30 КБ тянет), но медленно и с маленьким окном контекста.</p>

<p><strong>8B-модели не годятся в агентский режим.</strong> Пробовал hermes3:8b и llama3.1:8b в роли субагентов, которые должны ходить по инструментам и писать отчёты, — вместо отчёта получал мусор. Удалил с диска. Локально хорошо работает «ответь на вопрос», а не «пойди и сделай».</p>

<p>Итого: встроенная AMD-графика — это честный локальный инференс для приватных вопросов, черновиков и простой рутины. Но не замена облачному vision, не площадка для тяжёлых агентов и не бесконечное окно контекста. Знать это заранее — половина успеха, чтобы потом не расстраиваться.</p>

<h2 id="итог">Итог</h2>

<p>Если у вас мини-ПК на свежем AMD и хочется попробовать локальную LLM без вложений в видеокарту — заводится. Рецепт: пробросить три устройства в контейнер, выставить права через tmpfiles.d, подменить gfx1103 на gfx1100 переменной <code>HSA_OVERRIDE_GFX_VERSION</code> и разрешить iGPU через <code>OLLAMA_IGPU_ENABLE</code>. Дальше — смотреть на <code>PROCESSOR 100% GPU</code> и радоваться, что вопросы больше не уезжают в чужое облако.</p>

<p>Просто помните: это iGPU, а не дата-центр. 15–24 токена в секунду, без вижна, с капризами на длинных промптах и потолком в 16 ГБ общей памяти. Зато бесплатно, приватно и — после пары часов мата — стабильно.</p>

<p>Теги: <a href="https://articles.clr58.ru/tag:llm" class="hashtag"><span>#</span><span class="p-category">llm</span></a> <a href="https://articles.clr58.ru/tag:ollama" class="hashtag"><span>#</span><span class="p-category">ollama</span></a> <a href="https://articles.clr58.ru/tag:rocm" class="hashtag"><span>#</span><span class="p-category">rocm</span></a> <a href="https://articles.clr58.ru/tag:selfhosting" class="hashtag"><span>#</span><span class="p-category">selfhosting</span></a></p>
]]></content:encoded>
      <guid>https://articles.clr58.ru/ai-series-03</guid>
      <pubDate>Mon, 14 Sep 2026 12:26:23 +0000</pubDate>
    </item>
    <item>
      <title>Radeon 760M + Ollama: как подружить встройку AMD с локальными LLM</title>
      <link>https://articles.clr58.ru/radeon-760m-ollama</link>
      <description>&lt;![CDATA[Обложка&#xA;&#xA;Исходные данные&#xA;&#xA;Мини-ПК на AMD Phoenix: встройка Radeon 760M (ядро gfx1103), 16 ГБ оперативки, дискретной карты нет. Задача — локальная LLM, чтобы вопросы не уезжали в чужое облако и без счётчика за токены.&#xA;&#xA;Но gfx1103 официально в ROCm не значится, а всё крутится в LXC под Proxmox — там нет udev, и устройства контейнеру «из коробки» не видны.&#xA;&#xA;Как делали&#xA;&#xA;Пробрасываю в контейнер три устройства, через которые идут вычисления:&#xA;&#xA;/dev/dri/renderD128 — вычислительный узел рендера;&#xA;/dev/dri/card0 — карта как устройство;&#xA;/dev/kfd — дверь в ROCm-стек.&#xA;&#xA;Одна команда на Proxmox:&#xA;&#xA;pct set 107 -dev0 /dev/dri/renderD128 -dev1 /dev/dri/card0 -dev2 /dev/kfd&#xA;&#xA;Права: udev в LXC нет, поэтому tmpfiles.d раздаёт владельца и группу при старте контейнера:&#xA;&#xA;z /dev/dri/renderD128 0666 root render -&#xA;z /dev/dri/card0 0666 root video -&#xA;z /dev/kfd 0666 root render -&#xA;&#xA;Сам хак. gfx1103 — почти близнец дискретного gfx1100 (та же линейка RDNA3), поэтому подменяю идентификатор GPU:&#xA;&#xA;HSAOVERRIDEGFXVERSION=11.0.0&#xA;&#xA;и разрешаю Ollama работать с встройкой:&#xA;&#xA;OLLAMAIGPUENABLE=1&#xA;&#xA;Обе переменные — через drop-in юнита, сам сервис не трогаю:&#xA;&#xA;/etc/systemd/system/ollama.service.d/gpu.conf&#xA;&#xA;Рестарт — и ollama ps показывает самое приятное: PROCESSOR 100% GPU.&#xA;&#xA;Что получили&#xA;&#xA;gemma3:12b — 14,8 ток/сек, 8 ГБ в видеопамяти, контекст 131k;&#xA;gemma3:4b — 23,5 ток/сек, 3,3 ГБ;&#xA;fp16-вариант — 8,1 ток/сек, а качества ноль → выкинул.&#xA;&#xA;Это уровень «читает с моей скоростью»: не мгновенно, но комфортно для вопросов и черновиков.&#xA;&#xA;Три ложки дёгтя&#xA;&#xA;Вижн не работает: CLIP-энкодер падает на ROCm-хаке, картинки — только облако.&#xA;Длинные промпты нестабильны: 12b падает с CUBLASSTATUSINTERNALERROR на конфигах   10 КБ, 4b переваривает ~30 КБ, но медленно.&#xA;Это не сервер для тяжёлой работы, а карманный помощник: встройка остаётся встройкой, чудес нет.&#xA;&#xA;Вывод&#xA;&#xA;Встройка AMD — реальный бюджетный вариант для локальных LLM, если готовы к хаку с HSAOVERRIDEGFX_VERSION и помните про его хрупкость. Три команды проброса, один drop-in, один env-хак — и Ollama честно считает на GPU, а не на CPU.&#xA;&#xA;#openclaw #llm #ollama #selfhosting #rocm&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://paste.clr58.ru/post-radeon760m-ollama-digclean---8ee460dc-493c-4015-986a-f8d36fc50d59.jpg" alt="Обложка"></p>

<h2 id="исходные-данные">Исходные данные</h2>

<p>Мини-ПК на AMD Phoenix: встройка Radeon 760M (ядро gfx1103), 16 ГБ оперативки, дискретной карты нет. Задача — локальная LLM, чтобы вопросы не уезжали в чужое облако и без счётчика за токены.</p>

<p>Но gfx1103 официально в ROCm не значится, а всё крутится в LXC под Proxmox — там нет udev, и устройства контейнеру «из коробки» не видны.</p>

<h2 id="как-делали">Как делали</h2>

<p>Пробрасываю в контейнер три устройства, через которые идут вычисления:</p>
<ul><li><code>/dev/dri/renderD128</code> — вычислительный узел рендера;</li>
<li><code>/dev/dri/card0</code> — карта как устройство;</li>
<li><code>/dev/kfd</code> — дверь в ROCm-стек.</li></ul>

<p>Одна команда на Proxmox:</p>

<pre><code>pct set 107 -dev0 /dev/dri/renderD128 -dev1 /dev/dri/card0 -dev2 /dev/kfd
</code></pre>

<p>Права: udev в LXC нет, поэтому tmpfiles.d раздаёт владельца и группу при старте контейнера:</p>

<pre><code>z /dev/dri/renderD128 0666 root render -
z /dev/dri/card0 0666 root video -
z /dev/kfd 0666 root render -
</code></pre>

<p>Сам хак. gfx1103 — почти близнец дискретного gfx1100 (та же линейка RDNA3), поэтому подменяю идентификатор GPU:</p>

<pre><code>HSA_OVERRIDE_GFX_VERSION=11.0.0
</code></pre>

<p>и разрешаю Ollama работать с встройкой:</p>

<pre><code>OLLAMA_IGPU_ENABLE=1
</code></pre>

<p>Обе переменные — через drop-in юнита, сам сервис не трогаю:</p>

<pre><code>/etc/systemd/system/ollama.service.d/gpu.conf
</code></pre>

<p>Рестарт — и <code>ollama ps</code> показывает самое приятное: <code>PROCESSOR 100% GPU</code>.</p>

<h2 id="что-получили">Что получили</h2>
<ul><li>gemma3:12b — 14,8 ток/сек, 8 ГБ в видеопамяти, контекст 131k;</li>
<li>gemma3:4b — 23,5 ток/сек, 3,3 ГБ;</li>
<li>fp16-вариант — 8,1 ток/сек, а качества ноль → выкинул.</li></ul>

<p>Это уровень «читает с моей скоростью»: не мгновенно, но комфортно для вопросов и черновиков.</p>

<h2 id="три-ложки-дёгтя">Три ложки дёгтя</h2>
<ul><li>Вижн не работает: CLIP-энкодер падает на ROCm-хаке, картинки — только облако.</li>
<li>Длинные промпты нестабильны: 12b падает с <code>CUBLAS_STATUS_INTERNAL_ERROR</code> на конфигах &gt;10 КБ, 4b переваривает ~30 КБ, но медленно.</li>
<li>Это не сервер для тяжёлой работы, а карманный помощник: встройка остаётся встройкой, чудес нет.</li></ul>

<h2 id="вывод">Вывод</h2>

<p>Встройка AMD — реальный бюджетный вариант для локальных LLM, если готовы к хаку с <code>HSA_OVERRIDE_GFX_VERSION</code> и помните про его хрупкость. Три команды проброса, один drop-in, один env-хак — и Ollama честно считает на GPU, а не на CPU.</p>

<p><a href="https://articles.clr58.ru/tag:openclaw" class="hashtag"><span>#</span><span class="p-category">openclaw</span></a> <a href="https://articles.clr58.ru/tag:llm" class="hashtag"><span>#</span><span class="p-category">llm</span></a> <a href="https://articles.clr58.ru/tag:ollama" class="hashtag"><span>#</span><span class="p-category">ollama</span></a> <a href="https://articles.clr58.ru/tag:selfhosting" class="hashtag"><span>#</span><span class="p-category">selfhosting</span></a> <a href="https://articles.clr58.ru/tag:rocm" class="hashtag"><span>#</span><span class="p-category">rocm</span></a></p>
]]></content:encoded>
      <guid>https://articles.clr58.ru/radeon-760m-ollama</guid>
      <pubDate>Tue, 01 Sep 2026 17:14:02 +0000</pubDate>
    </item>
    <item>
      <title>Кто есть кто среди LLM: облако, локальный Ollama и fallback-цепочка</title>
      <link>https://articles.clr58.ru/ai-series-01</link>
      <description>&lt;![CDATA[Обложка&#xA;&#xA;Когда я начинал собирать AI-обвязку домашней лабы, в голове была красивая и наивная картинка: одна модель, которая умеет всё. Пишешь — отвечает, даёшь инструмент — вызывает, тормозит — перезапустил. Реальность оказалась злее. «LLM» — это не одна штука, а целый зоопарк, где у каждого зверя свои повадки: один дешёвый, но тупой; второй умный, но дорогой; третий умный и бесплатный, но падает с ошибкой 429 на ровном месте; четвёртый вообще недоступен из России и шлёт тебе 403 прямо в лицо.&#xA;&#xA;И вот ты сидишь с этим зоопарком и понимаешь: чтобы агент, который живёт у тебя в подвале и разбирает твою сеть, работал стабильно, а не «по настроению», нужна система. Про неё и поговорим — кто есть кто среди моделей, чем облако отличается от локального Ollama и зачем нужна fallback-цепочка, которая ловит всё, что падает.&#xA;&#xA;Три этажа одного «мозга»&#xA;&#xA;По сути любой мой запрос может уехать в одно из трёх мест, и у каждого — свои законы.&#xA;&#xA;Облако. Внешние API-провайдеры, где ты платишь за токены. Это рабочие лошадки: основная модель по умолчанию — DeepSeek Flash, быстрая и дешёвая, а для сложных разборов я вручную переключаюсь на её старшую версию DeepSeek Pro. Плюс отдельная маленькая модель для картинок и перекрёстной проверки — когда хочется, чтобы два разных «мозга» сошлись на одном ответе. Плюсы: скорость, умение работать с инструментами, не нужно своё железо. Минусы: деньги, чужие серверы, гео-блокировки и лимиты, которые меняются без предупреждения.&#xA;&#xA;Локальный Ollama. Свой GPU в своём контейнере, ноль рублей за токен, полный контроль над данными. Тут живёт gemma3:12b — основная локальная модель для субагентов. Текст не покидает домашнюю сеть, никто не считает твои запросы. Но у неё есть характер, о котором ниже, и он может сильно разочаровать.&#xA;&#xA;Fallback-цепочка. Клей между первым и вторым. Если основной ответ упал, модель занята или вернула ошибку — запрос автоматически уезжает на запасную. У меня цепочка такая: сначала DeepSeek Flash, потом DeepSeek Pro, и только в самом конце — локальный qwen3:30b, который крутится у местного провайдера бесплатно по квоте. Идея простая: чтобы агент никогда не остался с пустыми руками, даже когда всё вокруг горит.&#xA;&#xA;Живые цифры из наших замеров&#xA;&#xA;Замеры честные, на своём железе, без маркетинга. Железо такое: видеокарта Radeon 760M — встроенная, в десктопном чипе, — проброшенная в контейнер через ROCm. Самое смешное: чтобы эта карточка вообще заработала под ROCm, пришлось притвориться, что она другая модель. Переменная HSAOVERRIDEGFX_VERSION=11.0.0 заставляет драйвер думать, что у нас gfx1100, а не то, что реально сидит в чипе. Без этого хака инференс падает на CPU, то есть в разы медленнее.&#xA;&#xA;Итак, цифры:&#xA;&#xA;gemma3:12b — 8 ГБ VRAM, 14.8 токена в секунду, контекст до 128 тысяч токенов. Основная локальная рабочая лошадка.&#xA;gemma3:4b — 23.5 токена в секунду, контекст скромнее (32 тысячи). Запасная, быстрая, но простоватая.&#xA;8B-модели (hermes3, llama3.1) — я честно пытался использовать их в агентском режиме. Не тянут: вместо связного отчёта возвращают кашу, инструкции теряются на полпути. Удалены с диска без сожалений.&#xA;&#xA;Для сравнения: облачная Flash отвечает практически мгновенно и умеет в инструменты; Pro — заметно умнее, но дороже и медленнее. Плата за удобство — деньги и то, что текст уходит на чужие серверы. А локальный GPU — это про приватность и ноль затрат, но за скорость и мозги придётся побороться.&#xA;&#xA;Где зарыты грабли&#xA;&#xA;Тут начинается самое интересное, потому что половина «очевидных» решений не работает ровно так, как ожидаешь.&#xA;&#xA;Грабля первая: локальная модель не умеет в инструменты. gemma3 в связке с ollama версии 0.32.5 отвечает «does not support tools». То есть попросить её «выполни команду и верни результат» напрямую нельзя — у модели в списке возможностей только генерация текста и картинок. Сначала я этого не заметил: субагенты вроде работали. А потом в логах выяснилось, что все сессии с инструментами тихо уезжали на облачную Pro — локальная gemma была просто декорацией. Вывод: локальный субагент с инструментами — это пока фейк, если нет отдельного решения. Красивая картинка «всё на своём железе» разбивается об один-единственный ответ API.&#xA;&#xA;Грабля вторая: бесплатное облако кусается. У одного крупного агрегатора есть целый пул бесплатных моделей. Звучит как сказка: большие контексты, много параметров, цена ноль. На деле они стабильно отдают 429 — «провайдер перегружен, зайдите попозже». Лимит общий на все бесплатные модели: пока на счёте ноль — жалкие полсотни запросов в сутки, а очередь переполнена, и ты получаешь вежливое «иди отсюда». Для рутины — сойдёт, для чего-то важного — нет. Бесплатное — значит, в очереди за всеми платными.&#xA;&#xA;Грабля третья: география. OpenAI и тот же агрегатор из России отвечают 403. Просто так, по IP. Поэтому в fallback-цепочке их держать нельзя: толку от запасной модели, которая всегда отвечает «forbidden», ноль. У меня они исключены из автоматического переключения намертво — иначе при первом же сбое основной модели агент падал бы в гарантированную дыру.&#xA;&#xA;Грабля четвёртая: ROCm-хак капризный. Да, 12B-модель на встроенной карточке крутится. Но на длинных промптах (конфиги больше 10 килобайт) gemma3:12b падает с внутренней ошибкой ROCm. Короткие запросы работают, длинные — бабах. Плюс вижн-энкодер на этом железе вообще крашится, так что картинки локально не посмотреть — только через облачную модель с глазами. Жить можно, но это запасной аэродром, а не основной.&#xA;&#xA;Вывод&#xA;&#xA;Секрет не в том, чтобы найти «одну идеальную модель». Её нет. Секрет в том, чтобы честно разложить задачи по полочкам и склеить всё fallback-цепочкой: быстрая облачная модель для рутины, тяжёлая — для сложного, локальный GPU — для приватного и бесплатного, а цепочка переключений — чтобы ни один сбой не оставил агента без ответа.&#xA;&#xA;И два урока, которые я вынес на своих граблях. Первый: не верьте, когда локальная модель «работает с инструментами» — проверяйте логи, там может сидеть облачная замена, которая делает всю работу, пока вы гордитесь своим GPU. Второй: бесплатное и запасное выбирайте так, чтобы оно не лежало в той же самой луже (гео-блокировка, перегруз очереди), что и основное. Иначе ваша «отказоустойчивость» — это два туза одной масти.&#xA;&#xA;Теги: #llm #selfhosting #ollama #openclaw&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://paste.clr58.ru/post-ai-01-cover-digclean.jpg" alt="Обложка"></p>

<p>Когда я начинал собирать AI-обвязку домашней лабы, в голове была красивая и наивная картинка: одна модель, которая умеет всё. Пишешь — отвечает, даёшь инструмент — вызывает, тормозит — перезапустил. Реальность оказалась злее. «LLM» — это не одна штука, а целый зоопарк, где у каждого зверя свои повадки: один дешёвый, но тупой; второй умный, но дорогой; третий умный и бесплатный, но падает с ошибкой 429 на ровном месте; четвёртый вообще недоступен из России и шлёт тебе 403 прямо в лицо.</p>

<p>И вот ты сидишь с этим зоопарком и понимаешь: чтобы агент, который живёт у тебя в подвале и разбирает твою сеть, работал стабильно, а не «по настроению», нужна система. Про неё и поговорим — кто есть кто среди моделей, чем облако отличается от локального Ollama и зачем нужна fallback-цепочка, которая ловит всё, что падает.</p>

<h2 id="три-этажа-одного-мозга">Три этажа одного «мозга»</h2>

<p>По сути любой мой запрос может уехать в одно из трёх мест, и у каждого — свои законы.</p>

<p><strong>Облако.</strong> Внешние API-провайдеры, где ты платишь за токены. Это рабочие лошадки: основная модель по умолчанию — DeepSeek Flash, быстрая и дешёвая, а для сложных разборов я вручную переключаюсь на её старшую версию DeepSeek Pro. Плюс отдельная маленькая модель для картинок и перекрёстной проверки — когда хочется, чтобы два разных «мозга» сошлись на одном ответе. Плюсы: скорость, умение работать с инструментами, не нужно своё железо. Минусы: деньги, чужие серверы, гео-блокировки и лимиты, которые меняются без предупреждения.</p>

<p><strong>Локальный Ollama.</strong> Свой GPU в своём контейнере, ноль рублей за токен, полный контроль над данными. Тут живёт gemma3:12b — основная локальная модель для субагентов. Текст не покидает домашнюю сеть, никто не считает твои запросы. Но у неё есть характер, о котором ниже, и он может сильно разочаровать.</p>

<p><strong>Fallback-цепочка.</strong> Клей между первым и вторым. Если основной ответ упал, модель занята или вернула ошибку — запрос автоматически уезжает на запасную. У меня цепочка такая: сначала DeepSeek Flash, потом DeepSeek Pro, и только в самом конце — локальный qwen3:30b, который крутится у местного провайдера бесплатно по квоте. Идея простая: чтобы агент никогда не остался с пустыми руками, даже когда всё вокруг горит.</p>

<h2 id="живые-цифры-из-наших-замеров">Живые цифры из наших замеров</h2>

<p>Замеры честные, на своём железе, без маркетинга. Железо такое: видеокарта Radeon 760M — встроенная, в десктопном чипе, — проброшенная в контейнер через ROCm. Самое смешное: чтобы эта карточка вообще заработала под ROCm, пришлось притвориться, что она другая модель. Переменная HSA<em>OVERRIDE</em>GFX_VERSION=11.0.0 заставляет драйвер думать, что у нас gfx1100, а не то, что реально сидит в чипе. Без этого хака инференс падает на CPU, то есть в разы медленнее.</p>

<p>Итак, цифры:</p>
<ul><li><strong>gemma3:12b</strong> — 8 ГБ VRAM, <strong>14.8 токена в секунду</strong>, контекст до 128 тысяч токенов. Основная локальная рабочая лошадка.</li>
<li><strong>gemma3:4b</strong> — 23.5 токена в секунду, контекст скромнее (32 тысячи). Запасная, быстрая, но простоватая.</li>
<li><strong>8B-модели</strong> (hermes3, llama3.1) — я честно пытался использовать их в агентском режиме. Не тянут: вместо связного отчёта возвращают кашу, инструкции теряются на полпути. Удалены с диска без сожалений.</li></ul>

<p>Для сравнения: облачная Flash отвечает практически мгновенно и умеет в инструменты; Pro — заметно умнее, но дороже и медленнее. Плата за удобство — деньги и то, что текст уходит на чужие серверы. А локальный GPU — это про приватность и ноль затрат, но за скорость и мозги придётся побороться.</p>

<h2 id="где-зарыты-грабли">Где зарыты грабли</h2>

<p>Тут начинается самое интересное, потому что половина «очевидных» решений не работает ровно так, как ожидаешь.</p>

<p><strong>Грабля первая: локальная модель не умеет в инструменты.</strong> gemma3 в связке с ollama версии 0.32.5 отвечает «does not support tools». То есть попросить её «выполни команду и верни результат» напрямую нельзя — у модели в списке возможностей только генерация текста и картинок. Сначала я этого не заметил: субагенты вроде работали. А потом в логах выяснилось, что все сессии с инструментами тихо уезжали на облачную Pro — локальная gemma была просто декорацией. Вывод: локальный субагент с инструментами — это пока фейк, если нет отдельного решения. Красивая картинка «всё на своём железе» разбивается об один-единственный ответ API.</p>

<p><strong>Грабля вторая: бесплатное облако кусается.</strong> У одного крупного агрегатора есть целый пул бесплатных моделей. Звучит как сказка: большие контексты, много параметров, цена ноль. На деле они стабильно отдают 429 — «провайдер перегружен, зайдите попозже». Лимит общий на все бесплатные модели: пока на счёте ноль — жалкие полсотни запросов в сутки, а очередь переполнена, и ты получаешь вежливое «иди отсюда». Для рутины — сойдёт, для чего-то важного — нет. Бесплатное — значит, в очереди за всеми платными.</p>

<p><strong>Грабля третья: география.</strong> OpenAI и тот же агрегатор из России отвечают 403. Просто так, по IP. Поэтому в fallback-цепочке их держать нельзя: толку от запасной модели, которая всегда отвечает «forbidden», ноль. У меня они исключены из автоматического переключения намертво — иначе при первом же сбое основной модели агент падал бы в гарантированную дыру.</p>

<p><strong>Грабля четвёртая: ROCm-хак капризный.</strong> Да, 12B-модель на встроенной карточке крутится. Но на длинных промптах (конфиги больше 10 килобайт) gemma3:12b падает с внутренней ошибкой ROCm. Короткие запросы работают, длинные — бабах. Плюс вижн-энкодер на этом железе вообще крашится, так что картинки локально не посмотреть — только через облачную модель с глазами. Жить можно, но это запасной аэродром, а не основной.</p>

<h2 id="вывод">Вывод</h2>

<p>Секрет не в том, чтобы найти «одну идеальную модель». Её нет. Секрет в том, чтобы честно разложить задачи по полочкам и склеить всё fallback-цепочкой: быстрая облачная модель для рутины, тяжёлая — для сложного, локальный GPU — для приватного и бесплатного, а цепочка переключений — чтобы ни один сбой не оставил агента без ответа.</p>

<p>И два урока, которые я вынес на своих граблях. Первый: не верьте, когда локальная модель «работает с инструментами» — проверяйте логи, там может сидеть облачная замена, которая делает всю работу, пока вы гордитесь своим GPU. Второй: бесплатное и запасное выбирайте так, чтобы оно не лежало в той же самой луже (гео-блокировка, перегруз очереди), что и основное. Иначе ваша «отказоустойчивость» — это два туза одной масти.</p>

<p>Теги: <a href="https://articles.clr58.ru/tag:llm" class="hashtag"><span>#</span><span class="p-category">llm</span></a> <a href="https://articles.clr58.ru/tag:selfhosting" class="hashtag"><span>#</span><span class="p-category">selfhosting</span></a> <a href="https://articles.clr58.ru/tag:ollama" class="hashtag"><span>#</span><span class="p-category">ollama</span></a> <a href="https://articles.clr58.ru/tag:openclaw" class="hashtag"><span>#</span><span class="p-category">openclaw</span></a></p>
]]></content:encoded>
      <guid>https://articles.clr58.ru/ai-series-01</guid>
      <pubDate>Mon, 31 Aug 2026 12:20:36 +0000</pubDate>
    </item>
  </channel>
</rss>