Transcription
Привет, друзья. Сегодня мы с вами захостим свой персональный чат с LM-моделями на основе популярного Dipsic и Gemini и сделаем это на своём домашнем сервере. Поделю этот ролик на две части. Сначала расскажу кратко о железе и апгрейде, а потом покажу, как запускал нейронки.
В прошлом ролике я пересобирал залитый сервер моего друга, который остался у меня. Его я изначально задумывал для экспериментов с виртуалками и контейнерами, которые не жалко потерять в случае чего. А переросло это всё в идею сделать свой сервер для хостинга нейронок. И первое, что бы я хотел попробовать - это распространённые LLM-модели, чтобы протестировать их и понять, какая подойдёт мне для моих будущих проектов.
Ну и, конечно же, чтобы было интереснее, мы будем запускать модели не только на процессоре, но и на видеокарте. Это RTX 3060 MSI Ventus на 12 ГБ видеопамяти. Покупал я её на Озоне. Досталась она мне за 27.000 руб. Многие из вас скажут, что за эту цену можно было бы взять TI-версию, и будут правы. Но в природе не существует TI-версии 3060 с 12 ГБ видеопамяти. к сожалению, только восемь. Да и разница между обычной и Ti-версией может быть заметна разве что в некоторых играх. Поэтому я сделал более разумный выбор в сторону памяти. Ведь для LLM моделей она будет важнее, и позже вы поймёте, почему.
Подготавливаю системник для интеграции карты. За 9 месяцев тут накопилось много пыли. Вместе с пылью вытаскиваю старую карточку затычку. Примеряю новую карту и решаю сразу её прикрутить. Дальше нужно протянуть питание. Откопал доставшийся в наследство провод и начал установку. Блок у меня на 500 Вт. Этого достаточно для такой карточки и процессора. Подключил питание к самой карте. И вот этот вот забавный отросток смотрится прямо не очень. Поэтому решаю его закрепить, ну, хотя бы стяжечкой.
Время запускать. Я особо не переживал, что всё это не запустится, потому что тестировал карту за кадром на тестовой сборке, но внезапно картинка не появилась. И такая проблема у меня уже возникала несколько раз, когда выключали свет и комп перезагружался, но не стартовал систему. Такое уже случалось, когда я проверял эту оперативку. Да, кто не смотрел предыдущий ролик, знайте, часть компонентов этого сервака когда-то заливалась дождём. И если раньше всё решалось перезапуском, то сейчас он не хотел запускаться вообще ни в какую. Где-то около часа я просидел, перебирая плашки памяти, и в итоге смог выявить живые. Кстати, вот годный лайфхак для теста оперативки. Если у вас нет посткарты, то можете подключить сетевой провод и по нему смотреть, пошла ли инициализация памяти. Если светодиоды на интерфейсе не загораются, значит оперативка не инициализировалась. Если интерфейс радостно замигал, то значит оперативка прошла пост.
Всё запустилось, и я увидел логин скрин Проксмакса. И теперь можно всё собирать и закрыть все крышки. Опытным путём я выявил, что в нас покинуло две плашки. Это примерно на две больше, чем мне хотелось, потому что для этого видоса они мне были прямо очень нужны. Ну да ладно, выкрутимся. Итого у меня осталось две плашки по 8 гигов, что в сумме даёт 16.
Ну и теперь переходим к софтовой части. Решил сначала запустить какую-нибудь модельку на процессоре, а потом уже пробовать с видеокартой. Буду ставить модели через олама. Тут можно выбрать любую и погонять у себя локально. И это полностью бесплатно. Даже если у вас нет своего домашнего сервера, вы можете попробовать на своём личном компьютере. Есть доступные модели разного объёма. И при выборе модели смотрите на столбик сайз, потому что это ориентировочный размер, который модель займёт в оперативной памяти. Иногда она может занять даже чуть больше, поэтому оставляйте 1-2 гига в запасе для системы и буфера.
Для моих характеристик сервера хорошо подойдут модели до 14 би. Буква B означает биллион, то есть миллиард. А само это значение показывает, на каком количестве параметров была обучена сеть. Чаще всего, чем больше параметров, тем модель умнее. Параметр контекст отвечает за количество токенов контекста, которое способно переварить нейронка, чтобы помнить цепочку вашего разговора. Некоторые модели нацелены на точечный разовый ответы, и поэтому контекст их меньше. В некоторых, наоборот, размер контекста может быть больше. Токен - это кусок текста. Слово может быть одним токеном, а может разбиваться на два или три, если оно слишком большое.
Разберём пример создания виртуалки. В качестве виртуализации я буду использовать всё тот же Proxmox. В качестве операционки последняя минимальная версия у бунту сервер. Я её скачал напрямую из сайта при помощи интерфейса прокса. В основной информации первую машину называю OLAM CPU для удобства, чтобы понимать, что на ней будет запускаться только CPU-версии. Дальше выбираю дистрибутив у бунту. На следующей вкладке в параметре машин выбираю Q35, а в BIOS выбираю UFI. Это нужно для поля новых систем и лучшей совместимости. Кстати, об этих параметрах писал зритель с ролика про мини ПК, и здесь этот совет пригодится. Также выбираю хранилище для EFI диска и отмечаю галочку Agent. Это дополнительный мониторинг для виртуалки.
На вкладке дисков выбрал SSD для виртуалок и оставил объём по умолчанию на 32 гига. И это было зря. Можно было бы выделить побольше, потому что хотелось протестировать больше моделей, а постоянно удалять старые и ставить новые в какой-то момент надоело. В общем, если у вас есть возможность, то выделите побольше. Также в пункте кэша выбрал Rightрайбк. Вроде как, по советам опытных людей, это оптимизирует общение виртуальной машины и диска, что даст чуть больше производительности. Экспертов прошу навалить комментариев по этому пункту, потому что, если честно, я за это особо не шарю.
Дальше на очереди процессор. Для начала я дал шесть ядер, хотел понять, с каким минимумом нейронка нормально работает. Это значение будет перебираться мной в течение всех тестов. И в конце я расскажу свой итоговый конфикт для всех машин. В графе Type я рекомендую выбрать значение host. Тогда тип вашего процессора будет передаваться напрямую в машину. Для некоторых задач, которые требовательны к оптимизации, может быть, важно знать точную модель, чтобы применить оптимизацию для неё. Оперативной памяти я решил выделить 12 гигов, чтобы была возможность использовать модели размером до 10 гигов, а остальное оставить запасом для системы. И в прошлом ролике я сказал совершенно неверную вещь. Галочку девайс как раз-таки нужно отключить, чтобы ресурсы памяти были гарантированными. Я заболтался во время озвучки, а во время монтажа как-то упустил этот момент. Прошу меня простить. Опять же большая благодарность всем тем, кто это заметил в комментариях. Пока не увидел комменты, я сам не заметил эту ошибку.
Машина создана, можно запускать установку. Она тут абсолютно простая, думаю, вы и сами спокойно с ней разберётесь. Но есть пара моментов. Во-первых, я установил самый минимальный напор, чтобы система потребляла как можно меньше оперативки и постоянной памяти. Второе. Я давненько не ставил серверные дист убунты. Думал, что по умолчанию на основной раздел возьмётся всё нераспределённое пространство. Но, как оказалось, инсталлятор Упунты почему-то не умеет делать это по умолчанию. Поэтому на моменте автоматической разметки диска раздел Унтужно будет отредактировать, расширив раздел до допустимого максимума. Ну либо можно, в принципе, самостоятельно разметить диск, как вам нужно. И да, ещё из важных моментов, ещё рекомендую сразу включить SS-сервер. Это прямо в инсталляторе можно сделать.
После установки системы я обычно устанавливаю несколько удобных для меня инструментов. Мой минимум - это редактор Nano, HTP и Gest Agent. Для удобства все команды, которые я использую, размещу в своём Telegram-канале с пошаговым описанием. А то, если я буду прямо на каждую команду обращать своё внимание, то вы тут от скуки уснёте. В общем, для всех тех, кто хочет повторить у себя, все инструкции и команды из этого видоса вы знаете, где найти.
После установки программ устанавливаю Allлаama. Звучит очень громко, на самом деле. Для установки нужно просто скачать SHsриpt и запустить. Прямо на сайте Олаama он есть. Делается всё одной командой. Даже думать не нужно. С одной стороны, запускать такие скрипты небезопасно, с другой стороны, если хотите заморочиться с безопасностью, просто проверьте сам код скрипта перед тем, как его запустить.
После установки инсталлятор Олаama скажет, что не смог определить видеокарту и будет запускать модели только на CPU. Нам в первой машине это и нужно, поэтому оставляем как есть. Этот же установочник добавит Олама как сервис, и он будет всегда запускаться при старте системы. То есть, если сервер перезагрузится, то ОлаAM автоматически поднимется в системе. Я вот в такие моменты вообще забываю, что Линуксом пользуюсь и чувствую себя прямо пользователем Apple, когда всё настроили за меня и мне только одну команду запустить нужно.
Самое время опробовать какую-нибудь модельку. Решил выбрать самую популярную на момент записи. Это Dipsic R1 версия на 8 млрд параметров. Весит модель чуть больше 5 гигов. Для разминки будет самое то. При выборе модели она самостоятельно скачивается и после этого готова к использованию прямо в терминале. Перед тем, как пойдём дальше, я решил её немножко подонимать вопросами и посмотреть, насколько быстро будет отвечать. В целом отвечает достаточно неплохо и даже по скорости работает нормально. Конечно, медленнее, чем оригинальный дипсик, но вполне сносно. Да, если кто не в курсе, это не прямо один в один модель дипсика, но базируется на ней, так как это открытый следовательский проект, который даже есть на hхing Face. Просто она дотюнена до таких моментов, чтобы её можно было запускать на небольших ресурсах.
Ну и, конечно же, работая с терминалом не так удобно, поэтому у модели есть API, при помощи которого можно обращаться к ним. По умолчанию Алаama поднимает веб-сервис на порте 11.434, 434, но доступен он только локально на машине. Этот порт можно пробросить, чтобы сервис был доступен в локальной сети, но мне хотелось бы обращаться к хостнейму машины без указания порта, поэтому я решил поднять engin сервер. Делается это всё в пару команд. Нужно установить сам Enginкс, создать config и в нём указать проксирование с восьмидесятого порта на локальный host. Эти инструкции всё также будут в моём Telegram-канале. Я настроил Engins, и теперь сервис доступен по хостнейму.
Это, конечно, круто, но было бы лучше, если бы для наших ручных запросов была бы возможность не обращаться через консоль или API, а просто чатиться как с обычной моделью. Именно для таких случаев всё уже придумали и сделали за нас. Можно написать, конечно же, свой интерфейс для обращения к API, а можно взять готовые решения. Я решил не изобретать велосипед и взять вполне себе приемлемое решение Open Web UI. По сути, это готовая веб-морда с чатами, в которой можно переключаться между моделями Allлаama, которые установлены на вашем сервере.
Для этого я выделил отдельную виртуалку. По сути, это нетребовательное приложение, и для него много ресурсов не нужно. Я выделил 2 гига и два ядра, но даже этих параметров будет с избытком. В качестве операционки во всех сегодняшних проектах я использую всё ту же у бунту. Показывать процесс настройки не буду, он такой же. Поэтому переходим к этапу установки Webi. И он здесь тоже простой. Мы просто запускаем готовый контейнер. Для этого нам понадобится установить докер и какой-нибудь редактор текста. Я использую всё тот же Nanно. Пошагово всю установку описал всё там же в инструкции. Нам нужно запустить предлагаемый Docker Compos файл. По итогу на трёхтысячном порту вы получите приложение.
Первый раз нужно создать аккаунт. Это такая локальная регистрация. Можно вводить свои данные, можно левые. Это ни на что не повлияет. К сожалению, указанная ссылка в Docker компози не подтянула конфигурацию. Возможно, у меня был старый пример, поэтому Webi не нашёл мой сервис автоматически. Для того, чтобы добавить его вручную, нужно перейти в правом углу в adдминпанель. В не настройки, а в настройках conneнеctions. Дальше в разделе OлаAM API нужно просто перенастроить config, ну либо добавить новый, если у вас его вообще нет. Просто вбиваем адрес ипорт машины с AllлаAM. Также сразу можно проверить, находит ли VPI ваш сервис.
После этого можно переходить в интерфейс чатов и выбирать установленную модель. Если у вас установлено несколько моделей, то можете выбирать любую из них. Только помните, что эти модели должны сначала загрузиться в память, поэтому на переключение нужно какое-то время. В целом моделька неплохо реагирует на запросы, даже на странные типа: "Привет, Андрей". Что мне нравится в этой модели можно увидеть, как идут размышления даже на простые запросы, не несущие большого смысла. На вопросы посложнее она, конечно, отвечает прямо не супербыстро. Всё-таки нужно подумать. А процессор не располагает такими вычислительными мощностями, и все шесть ядер грузятся на полную.
Поскольку память позволяет, я решил протестировать ещё и модель на 14 млрд параметров, и она уже весит 9 ггов. По идее, она должна лучше отвечать на вопросы, но на мой дефолтный вопрос про жизнь на Марсе ответ был очень коротким и не выдалось размышлений. Хотя над вторым вопросом модель решила задуматься и пояснить ответ более развёрнуто. И, возможно, сама-то модель работает лучше. всё-таки больше параметров, значит, и больше, и лучше знания. Но я столкнулся с двумя неприятными вещами. Во-первых, модель стала медленнее отвечать, и это логично, ведь она объёмнее и ей нужно переварить больше инфы. Во-вторых, размышление бывают то на русском, то на английском. В этом нет ничего плохого. Главное, что ответ был на исходном языке. Но куда неприятнее то, что он бывает кривым и очень часто содержит английские слова и китайские иероглифы. Кстати, в модели на 8 млрд я такой проблемы не заметил. Да, общий ответ, конечно же, понять можно, но это очень критично, если вы собираетесь что-то автоматизировать при помощи такой модели, потому что в автоматических ответах она будет выдавать такой же невалидный текст, и за ней придётся ещё повторно перепроверять или редактировать вручную.
Давайте теперь попробуем с видеокартой и протестируем работу моделей на ней. Для этого нужно сделать три вещи. Первое - это настроить BIOS основной железки. Настройка конфигурации важно включить VTD и VTX. Это дополнительные параметры виртуализации. Второе - это подготовить сам Proxm, чтобы он не захватывал видеокарту при загрузке. В противном случае мы не сможем её отдать отдельной виртуалке. Ну и третье - это настроить сам проброс карты виртуальную машину, в которой она будет использоваться. Процесс - это несложный, но чтобы не растягивать ролик, я поэтапно писал инструкции, всё там же.
Для тестирования сетки на GPU я решил использовать отдельную виртуалку. Задал ей имя Allлаama GPU и пробросил в неё видеокарту. После проброса у вас отключится возможность подключаться через консоль no BNC. И это нормальное поведение, и пофикситить это можно только отключением проброса карты. Поэтому дальнейшее взаимодействие с машиной продолжаем через SSH. В самой виртуалке дополнительно нужно установить драйвера. Установка Олама остаётся всё такой же, как и была. Если видеокарта найдена в системе, об этом скажет вам сам установочник.
Ну и теперь время запустить и протестировать. Как можно заметить, модель DIPS R1 на 14 млрд работает очень шустро, буквально за несколько секунд выдаёт размышление и свой ответ. Мне кажется, по скорости достаточно близко к современным чатам, но неприятный момент с артефактами всё ещё остаётся. И, как мне кажется, это проблема именно модели, а нехватки ресурсов, потому что, отвечая на тот же вопрос, но на английском, таких проблем вообще нет. Как вы могли заметить, процессор больше не грузится, и ядра скучают без дела, поэтому на такую машину вполне можно оставить два или четыре ядра. Кстати, для наглядности я ещё вывел статистику по видеокарте, и можно увидеть текущую нагрузку, потребление памяти и питания и температуру. Сама карта работает тихо, и, судя по статистике, кулера работают в полсилы, а температура полностью приемлемая.
В процессе я тестировал разные модели. Синтетических тестов я не делал, так как они и так выложены практически каждой модели. Для меня было куда важнее, чтобы сеть отвечала достаточно быстро и без аномалий в виде символов. Тестировал я в основном на трёх вопросах. Есть ли жизнь на Марсе? Почему небо голубое? Почему один больше, чем два? Каждый из них, на мой взгляд, определяет, насколько нейронка готова к ответам на разные типы вопросов. Например, известные, но плохо сформулированные, также ещё не до конца изученные и, соответственно, на неправильно поставленные.
Затестировал разные популярные модели и заметил важные вещи. Если у вас нет видеокарты, но много памяти, то не рекомендую использовать модели больше 8 млрд. Даже если у вас хватает памяти, эти модели будут проседать по производительности из-за нехватки мощности. А вот мой личный топ небольших моделей. На первом месте Deepsic R1, на втором Lama 3.1, ну, а на третьем Quin 3. Все эти модели на 8 млрд параметров, но у Queen 3 меньше размер контекста, чем у других. В более больших моделях в топе GEMA 3 на 12 млрд, э, моделька на основе Google GMN, и Quin 3 на 14 млрд. К сожалению, псик сюда не попал из-за своей невозможности работать нормально с русским языком.
В любом случае, думаю, что этот топ через несколько месяцев потеряет актуальность, потому что новые интересные модели выходят раз в пару месяцев. Плюсом вспоминаем, что у каждой модели есть свои задачи, под которые она больше подходит. Поэтому выбор для обычного чатинга, наверное, может быть любой. А вот для конкретных задач придётся перепробовать много разных моделей и найти более подходящую. Например, для кодинга точно подойдут не все.
Вполне резонный вопрос возник в ваших головах. Стоит ли это всё таких затрат, чтобы использовать нейронки, которые и так работают бесплатно, и большинство из них будет лучше. Например, тот же бесплатный DPC GPT или CL? Если честно, я не вижу в этом финансовой выгоды, ведь большая часть мощных моделей работают бесплатно. А если нужно больше возможностей или увеличение лимитов, то как будто бы 30 долларов в месяц - это небольшая сумма, которая, во-первых, будет очень долго окупаться, если использовать свою видеокарту, а во-вторых, своя видюха будет работать в любом случае менее эффективнее, чем свежая модель от того же Open AI на своём сервисе.
Единственный экономически выгодный кейс, который может окупиться - это если вам необходимо автоматизировать какую-то несложную работу через API, и то она должна быть достаточно объёмной, чтобы для этого выделить сервак с видеокартой. В противном случае вам хватит и платного API существующих моделей. Они сейчас вообще недорогие и несколько баксов за миллион токенов. К тому же их использовать в разы проще, потому что вам не нужно париться за то, что у вас сервис упадёт, если отключат свет.
Я же это делаю специально для вас и чтобы вы посмотрели этот видос. Ну и для будущих идей, которые у меня иногда возникают, а иногда вы подсказываете их в комментариях. Поэтому накидайте идеи. У меня у самого в планах ещё несколько экспериментов. Возможно, наши общие мысли приведут к более интересным темам. Спасибо вам за то, что посмотрели этот ролик. Спасибо всем, кто поддерживает меня на бусте. Благодаря всем вам у меня появляются новые идеи для будущих роликов. Как-то так. Всем пока-пока.
[музыка]
[музыка]
My lips to party my lips time to party.
[музыка]
[аплодисменты]
[музыка]