Как раздобыть Nvidia Tesla за копейки и не поселиться в психушке: хардкор-гайд от выжившего

в 15:16, , рубрики: AI, china, devops, ml, Nvidia, nvidia cuda, nvidia tesla, nvidia tesla h100, pytorch

Привет! Сегодня расскажу вам сагу о том, как мы искали дешёвые AI-мощности для своего проекта и чуть не сошли с ума. Спойлер: спас нас Китай, но эта помощь стоила нам седых волос и нескольких лет жизни. Делюсь опытом, чтобы вы прошли этот путь быстрее.

Меня зовут Михаил, я работаю в компании VizoGEN на позиции CTO и вся история ниже - наш путь.

Пролог: Скромные запросы и растущие аппетиты

Всё начиналось невинно. Как и у многих, наш стек AI-инструментов (полный список — военная тайна, сорян, NDA) на этапе гипотез скромно кушал с 3080 TI. Потом пошло-поехало: 4080, а там и до 4090 TI рукой подать.

Но настоящий щелчок по носу случился, когда наши модели перевалили за 55 ГБ видеопамяти. Мinimum viable product внезапно потребовал maximum viable hardware.

Первая мысль — спаять несколько карт в кучу. Ан нет! Наш основной инструмент, ComfyUI, как оказалось, крайне криво работает с несколькими GPU. Одна карта — генератор, остальные — дорогущие костыли для видеопамяти. Экономика проекта плакала и просила пощады.

Акт 1: Просветление и первый шок

Осознание было жестоким: нужны промышленные монстры — серверные карты Nvidia Tesla. Мы, как добропорядочные ребята, пошли к цивилизованным провайдерам. Взяли на тест H100 у immers клауда.

Мощность — огонь! Скорость — космос! Счет... тоже космос. Скромные прикидочные расчеты на сервер с 8 картами показали $18-19K в месяц. Только на R&D! Мы не Илон Маск, чтобы так жечь деньги.

Акт 2: Восток — дело тонкое (и дешёвое)

Когда все дороги ведут в финансовый тупик, умный человек смотрит на Восток. В нашем случае — на Китай.

Да, есть нюансы. Из-за экспортных ограничений арендовать полноценную H100 не выйдет. Но китайцы, как всегда, нашли выход — урезанная, но всё ещё очень мощная H20. И главное — цена в несколько раз дешевле местных провайдеров. Мы потеплели душой и ринулись в бой.

Наивные.

Акт 3: Ад развертывания, или Добро пожаловать за Великий Фаервол

Мы думали, что взяли сервер. На самом деле мы купили билет в аттракцион невиданной жестокости под названием «Настройка окружения в КНР».

  • Проблема №1: Доставка образа. Вы когда-нибудь пытались загрузить образ ПО на 50+ ГБ на китайский сервер? Великий Фаервол Китая режет скорость так, будто вы качаете интернет через два консервных провода. Это был день… нет, два дня медитативного ожидания.

  • Проблема №2: Мир без GitHub и Pip. Представьте: вы привыкли, что воздух бесплатный, а тут вам его перекрыли. В Китае нет доступа к привычным pip install и git clone. Все ваши скрипты установки превращаются в тыкву. Зеркала есть, но это ловушка для самоуверенных.

Важное экспертное отступление: Если в оригинальном репозитории версия библиотеки 2.3.5 и в китайском зеркале — 2.3.5, это НЕ ОЗНАЧАЕТ, что это один и тот же файл. Всегда проверяйте хеши. Будьте параноиком: в зависимостях могут быть инъекции. Ваша безопасность — только ваша забота.

  • Проблема №3: Волшебный пинок и китайский язык. Решение пришло с неожиданной стороны. Спасибо сотрудникам Tencent Cloud, которые реально пытались помочь. Да, для этого пришлось включить Duolingo и поднапрячься с китайским, но это того стоило. Вывод: иногда прямой человеческий контакт решает то, что не могут решить технологии.

Акт 4: Драйвера, или «Совместимо» не значит «Работает»

Вы думали, что после настройки сети всё заработает? Как бы не так!

С H20 есть своя магия. Даже если официальная документация кричит о совместимости версий драйверов CUDA и вашего софта — это ложь. Нужно подбирать драйвера и версии библиотек методом тыка, по факту работы. Особенно nvidia-ctk.

Экспертный лайфхак: Если используете контейнеры (Docker), ваша главная задача — убедиться, что инстансы ВНУТРИ контейнера видят CUDA. Внешняя совместимость хоста — это лишь полдела. Потратили на эту магию еще пару дней.

Эпилог: Итоги и выводы для страждущих

Итак, спустя 4 дня битвы, окружение завелось. Мощности — в несколько раз дешевле. Нервы — частично восстановлены.

Резюме для тех, кто ищет дешёвые AI-мощности:

  1. Вариант А: Китай. Это дёшево, но будьте готовы к:

    • Битве с Фаерволом и скоростью.

    • Отсутствию прямого доступа к GitHub и Pip.

    • Тщательной проверке всех зависимостей из зеркал.

    • Танцам с бубном вокруг драйверов и совместимости.

    • Языковому барьеру (но он преодолим).

  2. Вариант Б: Складчина. Если нет ресурсов бороться с китайской спецификой, ищите единомышленников и скидывайтесь на сервер вместе. Менее гибко, зато голова не болит.

Наш выбор в данной ситуации — Китай. Да, это хардкор. Но когда вопрос стоит между «вообще никак» и «сложно, но можно», мы выбираем второе.

Надеюсь, наш опыт сэкономит вам не только деньги, но и пару тысяч нервных клеток. Делитесь своими историями выживания в комментариях!

P.S. Если встретите в Пекине человека, который матерится на русском, устанавливая PyTorch, — это, возможно, наш DevOps. Передайте ему привет.

И немного полезных вам скриптов, надеюсь окажутся вам полезными.

# Удаление всех драйверов и зависимостей

sudo apt purge nvidia cuda libcuda -y
sudo apt autoremove -y
sudo rm -rf /usr/local/cuda* ~/.nv/
sudo find /usr -name "nvidia" -exec rm -rf {} ;
sudo find /usr -name "cuda" -exec rm -rf {} ;

# Поиск, если вдруг где-то что-то осталось

sudo find / -type f -name "nvidia" 2>/dev/null
sudo find / -type f -name "cuda" 2>/dev/null
sudo find / -type d -name "nvidia" 2>/dev/null
sudo find / -type d -name "cuda" 2>/dev/null

# Получение статуса по установленным зависимостям

python3 -c "import torch; print(f'PyTorch version: {torch.version}');
print(f'CUDA available: {
torch.cuda.is_available()}');
print(f'GPU count: {torch.cuda.device_count()}');
print(f'Current device: {torch.cuda.current_device()}');
print(f'Device name: {torch.cuda.get_device_name(0)}')"

#Пример ответа
PyTorch version: 2.7.1+cu126
CUDA available: True
GPU count: 8
Current device: 0
Device name: NVIDIA H20

# Общий скрипт проверки, назовем его test.py

import os
import torch

print("1. Проверка переменных окружения:")
print(f"LD_LIBRARY_PATH: {os.getenv('LD_LIBRARY_PATH')}")
print(f"PATH: {os.getenv('PATH')}")

print("n2. Прямой доступ к устройствам:")
try:
with open('/dev/nvidia0', 'rb') as f:
print("Успешное чтение /dev/nvidia0")
except Exception as e:
print(f"Ошибка доступа к /dev/nvidia0: {str(e)}")

print("n3. Низкоуровневая проверка CUDA:")
try:
from ctypes import cdll
libcuda = cdll.LoadLibrary('
libcuda.so')
print("
libcuda.so успешно загружена")
print(f"Версия драйвера: {libcuda.cuDriverGetVersion()}")
except Exception as e:
print(f"Ошибка загрузки
libcuda.so: {str(e)}")

print("n4. Тест PyTorch:")
try:
print(f"PyTorch version: {torch.version}")
print(f"CUDA available: {
torch.cuda.is_available()}")
if
torch.cuda.is_available():
print(f"GPU count: {torch.cuda.device_count()}")
print(f"Device 0: {torch.cuda.get_device_name(0)}")
except Exception as e:
print(f"Ошибка PyTorch: {str(e)}")

Автор: killersssurprise

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js