Сборка кастомной СЖО для GPU-сервера: схема контура, порядок водоблоков и опрессовка

Всем привет, с вами Низамов Илья. Это вторая часть цикла про кастомную СЖО для домашнего GPU-сервера под локальные нейросети. В первой части я поставил водоблок на RTX 3090 и сделал её однослотовой. Теперь сборка СЖО целиком: схема контура, порядок водоблоков, радиатор, помпа с баком, опрессовка воздухом на столе и первый запуск сервера под нагрузкой языковой модели. В конце сравниваю соседние карты: RTX 3090 уже на воде, две RTX 5070 Ti пока на воздухе.

Коротко о результате: контур держит 0,3 bar, все три карты стоят прямо в слотах, без райзеров. Под нагрузкой RTX 3090 на воде грелась до 48 °C (пик 50), а RTX 5070 Ti на воздухе дошли до 65 и 67 °C. По дороге тестовый блок питания спалил два жёстких диска, и помпа тут оказалась ни при чём.

Сам сервер нужен не ради железа. Локальная модель работает с данными, которые нельзя отправлять в облако, и в моей практике это чаще всего выгрузки из 1С. Как подключать такие модели к учётной системе, разбираем на курсе «ИИ для 1С».

Сборка кастомной СЖО: порядок водоблоков и опрессовка
Видео: Сборка кастомной СЖО: порядок водоблоков и опрессовка

Из чего собран контур

Перед сборкой я нарисовал себе схему: какие узлы, в каком порядке, сколько фитингов на каждое соединение и куда уходят свободные порты. Это не красивая картинка для ролика, а рабочая инструкция, по ней я потом и соединял всё на столе.

Схема контура кастомной СЖО: бак с помпой D5, тройник со сливом, расходомер, радиатор 480, водоблоки M.2, CPU, RAM и GPU

Контур один, последовательный, на помпе D5:

Узел Модель Роль
Бак с помпой D5 Bykski CP-PMD3COV гонит воду, расширительный объём
Тройник со сливом CC-TE3DTSO + кран слив в самой нижней точке
Расходомер с экраном Barrowch FBFT07 поток и температура воды
Радиатор 480 Barrow Dabel-60d + 4 × 120 мм остужает воду
Водоблок M.2 Alphacool HDX Apex SSD
Водоблок CPU Bykski XPR + крепление AM4 Ryzen 5 3600
Водоблок RAM Bykski B-RAM-X-V4 пока не установлен
Водоблок GPU EK-Quantum Vector Trio RTX 3090

Водоблок на оперативную память в этой серии не участвует. К нему нужны пластины, которые ставятся на сами модули памяти, а они ещё не приехали. Поэтому сейчас после процессора вода идёт сразу в видеокарту.

В каком порядке ставить водоблоки в СЖО?

Мой порядок: бак с помпой → тройник со сливом → расходомер → радиатор → SSD → CPU → GPU → обратно в бак. Вода выходит из радиатора самой холодной и проходит блоки от наименее горячего к самому горячему: SSD греется меньше всех, видеокарта больше всех.

В чужих роликах про водянку я не раз слышал, что порядок водоблоков в одноконтурной системе значения не имеет: ставьте как удобнее трассе. Я решил не спорить на слово и посчитать. Вода с большой теплоёмкостью на нормальном потоке нагревается на одном блоке совсем немного. При 1 L/min через контур проходит около 17 г воды в секунду, и каждые 100 W поднимают её температуру примерно на 1,4 °C. Видеокарта, которая стоит после SSD и процессора, получает воду теплее на полтора-два градуса, чем если бы стояла первой.

Подвигайте блоки и поток: при нормальном потоке разница укладывается в пару градусов, а на слабом потоке нагрев воды заметно растёт.

Отсюда два вывода. Первый: порядок действительно почти не влияет, и на моей схеме RAM-блок стоит между процессором и видеокартой просто потому, что физически он ближе всех к CPU и шланг получается короче. Второй важнее: главное в контуре не порядок, а поток и запас радиатора. Если поток упадёт, вода начнёт греться сильнее на каждом блоке, и порядок начнёт иметь значение. Поэтому в контуре стоит расходомер.

Второй радиатор, если нагрузка вырастет, логично ставить между процессором и видеокартой: тогда самый горячий блок получает заново остуженную воду. Мне пока хватает одного четырёхсекционного, но к этому я ещё вернусь.

Зачем в контуре тройник со сливом и расходомер?

Оба узла можно не ставить, система заработает и без них. Но обслуживать её без них неудобно.

Тройник с краном ставится на выход помпы. Помпа в корпусе стоит внизу, и кран оказывается в самой нижней точке контура. Когда придёт время менять жидкость, открываете кран и сливаете воду в ёмкость, не разбирая соединения.

Расходомер с экраном показывает поток и температуру воды, по нему видно, как работает система. Кроме него у меня есть отдельный датчик температуры и потока без экрана. Он подключается к материнской плате, чтобы плата знала, какой температуры вода и с какой скоростью она идёт. Если поток упадёт, плата может отключить систему до того, как что-то перегреется. Для сервера, который работает без присмотра, это главный довод в пользу датчика.

Датчик температуры Alphacool я вкручиваю в свободный порт радиатора со стороны входа. Там самая горячая вода в контуре, и по этому месту видно худший случай.

Радиатор и вентиляторы

Радиатор четырёхсекционный, на него встают четыре 120-миллиметровых вентилятора. В комплекте с радиатором идут свои винты, с вентиляторами другие, короткие, для крепления к корпусу. Путать их не надо. Вентиляторы соединяются между собой шлейфом и подключаются одним разъёмом к материнской плате. В порты радиатора вкручиваются два фитинга: вход горячей воды и выход остуженной.

Радиатор толщиной 60 мм, и под такую толщину штатных винтов часто не хватает. Винты подлиннее я внёс в список покупок заранее.

Какие термопрокладки ставить под водоблок SSD?

С водоблоком на M.2 есть нюанс. В комплекте Alphacool HDX Apex три термопрокладки: одна толщиной 1,5 мм и две по 0,5 мм. SSD вставляется в корпус блока и прижимается водоблоком.

Водоблок Alphacool HDX Apex для SSD M.2, два фитинга, Samsung 970 EVO Plus и три термопрокладки

Какая прокладка куда, зависит от того, где на SSD стоят микросхемы:

  • Чипы только сверху: снизу кладём толстую 1,5 мм, сверху тонкую 0,5 мм. Толстая прокладка выбирает зазор со стороны пустой платы.
  • Чипы с обеих сторон: тонкие 0,5 мм и сверху, и снизу. Толстая здесь не даст блоку прижаться к микросхемам.

Правило то же, что у видеокарты из первой части: прокладка толще нужного не даёт прижима, тоньше нужного не даёт контакта. Это инструкция под конкретный блок, у других производителей толщины свои.

У водоблока на SSD нашлось и последствие: он не дал вернуть на место кожух, который направлял воздух маленького вентилятора на чипсет. К этому я вернусь в разделе про температуры.

Водоблок на процессор собирается проще всех: вкрутил два фитинга, и всё. Крепление AM4 ставится уже на материнской плате.

Помпа с баком: кран, заглушка и губка

Бак с помпой пришёл отдельным комплектом, остальные детали узла я дозаказывал.

Бак с помпой D5 Bykski, крепёж, тройник, кран для слива, фитинги и заглушки

Как устроен узел:

  • вода заходит в бак сверху, выходит через боковой порт помпы;
  • на боковой выход прикручивается тройник, к его нижнему порту через переходник папа-папа подключается кран для слива;
  • из тройника вода идёт дальше через фитинг;
  • в верхнем порту бака есть лишнее отверстие, его закрывает комплектная заглушка;
  • внутри бака лежит губка: она гасит завихрения воды, пузырьков становится меньше, и, насколько я понимаю, помпа от этого чуть тише.

Верхний порт бака понадобится ещё раз при опрессовке: тестер вкручивается туда вместо заглушки, а после проверки заглушка возвращается на место.

Как понять, что фитинг дотянут?

На водоблок видеокарты я поставил два угловых фитинга на 90 градусов, чтобы шланги уходили вдоль карты и не занимали место соседнего слота.

Угловые фитинги на 90 градусов на водоблоке RTX 3090, вид со стороны бэкплейта

На этом шаге я заметил важную деталь. Первый фитинг я закрутил рукой, он встал выходом вверх, и я почувствовал, что он зажат жёстко. Второй в положении «вверх» ещё проворачивался с запасом. Я докрутил его примерно на четверть оборота, после этого он зажался как следует, но выход оказался направлен в сторону.

Вывод простой: угол фитинга подбирается после затяжки, а не вместо неё. Если оставить фитинг недотянутым ради красивого направления выхода, уплотнительное кольцо не прижмётся, и соединение будет травить. Тянуть достаточно рукой, до ощутимого упора и ещё чуть-чуть. Ключом подтягивать только в тесных местах, куда не подлезут пальцы.

Сколько фитингов и шланга брать на контур?

Все узлы готовы, можно соединять. Перед сборкой разложил всё на столе: бак с тройником и краном, расходомер, радиатор с вентиляторами, водоблоки и бухту шланга.

Компоненты кастомной СЖО перед сборкой: бак с помпой, расходомер, радиатор, водоблоки GPU, CPU и SSD, шланг

В контуре восемь узлов, значит восемь соединений. На каждое соединение нужно два фитинга, по одному на каждый конец шланга, итого 16. Я брал 20, четыре остались в запасе. Шланг режу обычными ножницами, специальный инструмент не нужен. Важно резать ровно поперёк: косой срез хуже садится на фитинг.

Посчитайте свой контур: калькулятор выдаст число фитингов, длину шланга и примерный объём жидкости.

Что стоит докупить заранее, чтобы сборка не встала на полпути:

  • дистиллированная вода, 4–5 L: на промывку, заливку и доливку. Концентрат Barrow разводится примерно 1 к 25, объём моего контура около 1,2–1,5 L;
  • термопаста, если её нет в комплекте с блоками;
  • хаб для четырёх вентиляторов с подсветкой и питание для помпы;
  • двухпиновый разъём под датчик температуры на материнской плате: проверьте, что он есть;
  • винты подлиннее для радиатора толщиной 60 мм.

Зачем делать опрессовку на столе, а не в корпусе?

Сейчас контур собран временно, на столе. В корпусе я разложу узлы по местам, подберу шланги по длине и сделаю опрессовку ещё раз. Но первую проверку делаю именно сейчас. Если протечка найдётся в радиаторе или в одном из водоблоков, я узнаю об этом до того, как соберу корпус со всем этим хозяйством. Искать протечку в собранной системе намного дольше.

Порядок соединения: радиатор → SSD → CPU → GPU → помпа → тройник с краном → расходомер → обратно в радиатор. Тестер давления подключается к верхнему порту бака, контур накачивается воздухом, питание при этом полностью отключено.

Опрессовка контура СЖО воздухом: манометр на верхнем порту бака показывает 0,3 bar

Я накачал 0,3 bar и оставил систему на пару часов. Давление быстро не падало, значит, все соединения держат, и можно переходить к воде. Обычно рекомендуют 0,3–0,5 bar и выдержку 30–60 минут. Максимальное давление смотрите в инструкции к баку и акриловым блокам.

Есть ловушка, о которой в роликах про опрессовку почти не говорят. В контуре воздух, а давление воздуха зависит от температуры. Мой сервер стоит у солнечного окна: если за два часа проверки воздух прогреется на несколько градусов, давление немного вырастет, а к ночи упадёт, хотя протечки нет. При 0,3 bar каждый градус меняет показание примерно на 4 mbar, и на мелкой шкале манометра это уже заметно. Калькулятор ниже учитывает температуру и отвечает, что у вас: протечка или просто остыл воздух.

Если давление всё-таки падает, начинайте с фитингов, которые дотягивали последними, и проверяйте соединения мыльным раствором. Подозрительный радиатор или водоблок можно опрессовать отдельно, заглушив второй порт.

Блок питания подал 12 V вместо 5 V

В одном из прошлых роликов я жаловался на разъём подключения помпы: казалось, что она подключается неправильно. Оказалось, дело не в помпе. Помпа подключается и работает абсолютно нормально.

Виноват был тестовый блок питания. Через этот разъём он подавал 12 V вместо 5 V. Почему, я так и не понял. Заодно он спалил мне два жёстких диска. Диски были старые и небольшие, но всё равно обидно.

Я не знаю точной причины именно в моём случае, поэтому совет общий: кабели модульных блоков питания не взаимозаменяемы. Разъём на стороне блока у разных производителей и даже у разных моделей одного производителя может быть одинаковым, а назначение контактов разным, и тогда 12 V приходят туда, где ждут 5 V. Прежде чем подключать к непроверенному блоку помпу, диски или хаб, пройдите мультиметром по контактам кабеля. Это пять минут против сгоревшего железа.

Первый запуск: Qwen3.8 27B на трёх картах

После опрессовки контур залит, помпа качает, вода охлаждается. Все карты теперь стоят прямо в разъёмах материнской платы: RTX 3090 на воде в середине и две RTX 5070 Ti на воздухе по бокам. Радиатор пока стоит рядом с платой, место в корпусе у него появится позже.

Кастомная СЖО в работе: водоблоки CPU и RTX 3090, бак с помпой и две RTX 5070 Ti на воздухе

Нагрузку я дал реальную, ту же, под которую собирается сервер: llama.cpp на всех трёх картах.

Команда запуска llama-server с моделью Qwen3.8-27B и черновой моделью DFlash2 на трёх видеокартах

CUDA_VISIBLE_DEVICES=0,1,2 ./build/bin/llama-server \
  -hf unsloth/Qwen3.8-27B-GGUF:UD-Q8_K_XL \
  -hfd incoai/Qwen3.8-27B-DFlash2-GGUF:Q8_0 \
  --spec-type draft-dflash --spec-draft-n-max 7 \
  --host 0.0.0.0 --port 8000 \
  --ctx-size 262144 --parallel 1 \
  --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn on \
  --temp 0.7 --top-p 0.8 --top-k 20 --presence-penalty 1.5 --min-p 0.00 \
  --reasoning off --split-mode layer \
  --batch-size 2048 --ubatch-size 512 \
  --no-mmproj --jinja --chat-template-file /home/ilya/ai/qwen38-fixed.jinja

Что здесь важно:

  • -hf — основная модель Qwen3.8 27B в кванте UD-Q8_K_XL от Unsloth; -hfd — черновая модель DFlash2 для спекулятивного декодирования. Как DFlash2 соотносится с MTP по скорости, я разбирал в отдельном сравнении.
  • --ctx-size 262144 — полный контекст модели, KV-кеш в Q8, flash attention включён. Рассуждения выключены: для теста температуры они не нужны, нужна полная загрузка всех трёх карт.
  • --split-mode layer — слои модели разложены по картам. Карты при этом работают по очереди: пока токен проходит слои первой карты, остальные ждут. Поэтому в таком режиме карта редко сидит на своём лимите мощности постоянно.
  • --host 0.0.0.0 без ключа — сервер при старте прямо предупреждает, что CORS открыт для всех, а API-ключа нет. В домашней сети это терпимо, а если порт виден снаружи, добавьте --api-key.

Сколько вообще влезает в эти карты и как ведут себя движки, есть на странице модели Qwen3.8 27B в бенчмарках и в сравнении vLLM и llama.cpp.

Вода против воздуха: какие получились температуры?

Сначала простой. В nvtop все три карты без нагрузки: RTX 3090 на воде 30 °C при 17 W, обе RTX 5070 Ti на воздухе по 40 °C при 2 и 11 W. Та карта, что потребляет больше всех, оказалась самой холодной.

Под нагрузкой я смотрел не только видеокарты. Для этого я написал небольшую утилиту, которая раз в две секунды собирает все датчики сервера в одну таблицу: текущее значение, минимум, максимум, среднее и подсказку, что это за датчик.

Таблица температур сервера под нагрузкой: SSD, процессор, чипсет, RTX 5070 Ti и RTX 3090

Датчик Охлаждение 1:26 замера 2:22 замера Максимум
RTX 3090 вода 42 °C 48 °C 50 °C
RTX 5070 Ti (GPU0) воздух 53 °C 53 °C 65 °C
RTX 5070 Ti (GPU1) воздух 60 °C 64 °C 67 °C
Процессор вода 54 °C 55,9 °C 56,5 °C
SSD, память NAND вода 41,9 °C 42,9 °C 44,9 °C
Чипсет воздух 70 °C 70 °C 70 °C

По пиковым значениям вода выигрывает 15–17 °C, по текущим от 5 до 16 °C, смотря какая карта и какой момент. И это при том, что у RTX 3090 лимит мощности выше: 370 W против 300 W у RTX 5070 Ti. Одна из 5070 Ti греется сильнее второй. Мне кажется, она забирает воздух, нагретый бэкплейтом 3090, а у второй обдув лучше.

Самый горячий датчик в системе — чипсет, 70 °C. Он находится под видеокартой, а кожух, который направлял на него поток от маленького вентилятора, я снял: он не влезает из-за водоблока на SSD. Утилита считает 60–70 °C нормой, а тревогой ближе к 80, так что пока терпимо, но это надо дорабатывать.

Цифры честные, но не лабораторные:

  • замер короткий, таблица снята на второй и третьей минуте, и температура ещё росла. На длинной нагрузке цифры будут выше у всех, но разница, по-моему, сильно не изменится;
  • сервер стоит на солнце, детали чёрные и прогреваются сами;
  • радиатор лежит на столе, а не в корпусе, и воздух к нему идёт свободно.

Когда поставлю водоблоки на RTX 5070 Ti, ожидаю у них меньше 40 °C под такой нагрузкой. Проверю в одной из следующих частей.

Что дальше и чего в этой части нет

Как по мне, эксперимент удачный. Четырёхсекционный радиатор пока справляется: на воде одна видеокарта, процессор и SSD. Дальше по плану:

  • собрать корпус и разложить узлы по местам, опрессовать ещё раз;
  • заказать водоблоки на обе RTX 5070 Ti и, скорее всего, второй радиатор. Он встанет отдельным участком контура и будет охлаждать только видеокарты;
  • поставить водоблок на оперативную память, когда приедут пластины;
  • решить вопрос с чипсетом.

Чтобы не создавать ложного впечатления:

  • Водоблока на память в контуре нет, и на схеме он пока только запланирован.
  • Контур собран временно, радиатор не в корпусе, шланги не подобраны по длине.
  • Замер короткий, без контроля температуры в комнате. Долгий прогон и шум будут в финальной части цикла.

Как считать тепловой бюджет всего контура и почему с водоблоком карта становится однослотовой, я разбирал в первой части про водоблок на RTX 3090, а весь стенд с блоком питания и райзерами описан в статье про домашний GPU-сервер под локальные нейросети.

Если вы собираете сервер под локальные модели на воде, напишите в комментариях, в каком порядке у вас стоят водоблоки и какие получились температуры. А если сервер нужен под задачу, например подключить локальную модель к 1С и дать агенту работать с учётными данными, это тема моего курса «ИИ для 1С».

Частые вопросы