TL;DR: В этой статье мы возьмем новейшую Gemma 4 31B, которая в оригинале весит 62 ГБ, и заставим её работать и выгружаться на бесплатном Kaggle с лимитом диска в 57 ГБ. Спойлер: нам придется удалять исходники прямо во время работы Python-скрипта.
Введение: Кремниевый голод и санкции
Когда у тебя нет кластера A100, а есть только бесплатные T4 от Google, каждый байт становится полем боя. Мы живем в эпоху, когда модели растут быстрее, чем наши возможности их качать. Но математику не заблокируешь. По заветам нашего «Ghetto AI Manifesto», мы будем использовать «палки, желуди и сырой код», чтобы сделать топовый ИИ доступным каждому.
Проблема: Математика против нас
Gemma 4 31B в float16 весит ~62 ГБ.
Лимит диска на Kaggle — 57.6 ГБ.
Нам нужно:
Скачать 62 ГБ.
Квантовать их в 4 бита (получить еще 18 ГБ).
Выгрузить результат.
Математически это 62 + 18 = 80 ГБ. Система должна была упасть, но мы применили тактику Scorched Earth (Выжженная земля).
Техно-хаки: Как мы это провернули
1. Квантование «на лету»
Мы использовали bitsandbytes и NF4. Главный фокус — device_map="auto". Модель разрезалась пополам и легла в две карты T4 по 15 ГБ.
Note: Мы не ждали конца загрузки, мы начали жать веса сразу, как только они попадали в VRAM.
2. Операция «Аннигиляция кэша»
Это самый грязный хак. Как только модель была полностью загружена в видеопамять, мы вызвали shutil.rmtree() для папки кэша Hugging Face.
Зачем? В Linux можно удалить файл, который открыт процессом. Место в du не освободится сразу, но для новых файлов (шардов выгрузки) оно станет доступным. Мы удалили 62 ГБ исходников, пока Питон держал их в «уме», освободив место для 18 ГБ квантованных весов.
3. YOLO-Push
Вместо стандартного сохранения на диск и последующей выгрузки, мы использовали прямой стриминг push_to_hub.
Python
# Квинтэссенция нашего метода model.push_to_hub("repo_id", safe_serialization=True)
Результат: Криокамера для монстра
Теперь 31-миллиардная модель, которая «видит» и «понимает» сложный код, весит всего 18.3 ГБ. Она доступна для всех, у кого есть обычная домашняя видеокарта.
Пощупать артефакт можно здесь:
? https://huggingface.co/livadies/gemma-4-31B-Ghetto-NF4

Заключение
Санкции и лимиты — это просто параметры в конфиге, которые нужно уметь обходить. Интеллект должен быть свободным, даже если для этого приходится удалять систему под самим собой.
Stay Ghetto. Stay AI.
Комментарии (13)

anonymous
02.04.2026 18:39
Livadies Автор
02.04.2026 18:39Вообще-то здесь статья про квантование LLM и хардкорный MLOps, а не стол заказов. Но ради прикола я скормил твой комментарий той самой 4-битной нейронке, про которую пишу. \n\nОна передает, что твой метод split(' ') ломается о лишние пробелы, а твой костыль с 1630 математически неверен (ты считаешь сумму квадратов, а синтаксис требует произведение суммы, правильный ответ 1860480). \n\nВот нормальный интерпретатор, который она тебе написала: > \n
[import sys
SET = [] INTERVAL = [] SUMMA = 0 PRODUCT = 1
def set_(line): global SET SET = list(map(int, line[1:-1].split(', '))) print(*SET)
def interval_(line): global INTERVAL, SUMMA, PRODUCT
# 1. Умный сплит: бьем МАКСИМУМ на 3 части. # Вся математика (S[i] + A) останется единой строкой в expression parts = line.split(' ', 2) interval_str = parts[0] iterator = parts[1] expression = parts[2] if len(parts) > 2 else "" # 2. Парсим интервал или используем существующий (I) if interval_str == 'I': pass else: bounds = interval_str[1:-1].split(';') l = int(bounds[0]) r = int(bounds[1]) if interval_str[0] == '(': l += 1 if interval_str[-1] == ']': r += 1 INTERVAL = list(range(l, r)) # 3. Динамический вычислитель выражений if iterator: # Транслируем синтаксис ladder в чистый Python py_expr = expression.replace('S[i]', 'SET[i]').replace('A', 'str(SUMMA)') match iterator[0]: case 'A': # Amount (Сумма/Аккумулятор) SUMMA = 0 for i in INTERVAL: # eval на лету считает любую формулу SUMMA += eval(py_expr) print(SUMMA) case 'P': # Product (Произведение) PRODUCT = 1 for i in INTERVAL: PRODUCT *= eval(py_expr) print(PRODUCT)def comment_(line): if line[-1] == ‘"’: print(line[1:-1]) else: print(line[1:])
def parse(line): match line[0]: case ‘"’: comment_(line) case ‘{’: set_(line) case ‘(’ | ‘[’ | ‘I’: interval_(line) # Теперь ‘I’ идет в общий парсер! case _: print(f’ERROR {line}')
def scan(f): for line in f: line = line.strip() if line: parse(line)
if name == ‘main’: f = open(sys.argv[1]) scan(f) f.close()
]\n Учи матчасть и переходи на нейросети! :-)

Robyn_rock
02.04.2026 18:39Что за битва ботов в комментариях? Единственное что интересует - бесплатные Гугл Т4 это что и где. А то сидим тут без электричества и интернета, гуглить не можем.

Livadies Автор
02.04.2026 18:39Привет! Т4 — это серверные видеокарты от Nvidia (по 16 ГБ видеопамяти). Бесплатно их раздают в Google Colab (дают 1 карту) и в Kaggle (дают сразу 2 карты = 30 ГБ VRAM). Заходишь на Kaggle, жмешь Create Notebook, и в настройках справа выбираешь Accelerator -> GPU T4x2.
youscriptor
на обычной это какой объем минимальный видеопамяти?
Livadies Автор
Вот расклад по видеопамяти (VRAM):
Порог вхождения (20–24 ГБ VRAM): Это идеальный вариант. RTX 3090 или 4090 — наши фавориты. Модель залетает целиком, остается место под KV-кэш (контекст) и активации. Будет летать.
На грани (16 ГБ VRAM): На какой-нибудь RTX 4080 или 4070 Ti Super модель целиком не влезет (не хватит буквально 2-3 ГБ). Придется использовать CPU Offloading (выносить часть слоев в обычную оперативку). Работать будет, но скорость упадет с 40-50 токенов/сек до 2-5 токенов/сек.
Ghetto-стайл (8–12 ГБ VRAM): На «народных» картах типа RTX 3060 завести можно только через GGUF (llama.cpp) с жестким разделением слоев между GPU и RAM.
Итог: Если хочешь комфортно «летать» без тормозов — нужно 24 ГБ. Если готов чуть подождать — хватит и 16 ГБ с небольшим костылем в коде
Livadies Автор
Минусаторам привет. Вес модели в репозитории — 18.3 GB в формате .safetensors (NF4). Математика: 18.3 ГБ веса + ~1-2 ГБ на активации = 20 ГБ. RTX 3090/4090 справляются. Пруф веса в моем профиле на HF
Annsky
Это не обычная видеокарта.)
youscriptor
24 гига это не сказать что обычная видеокарта. У меня к сожалению всего 12 гиг
Livadies Автор
тогда костыли в коде нужны сам на бесплатном keggle запускаю gemma 4 настолько свежая что у нее нет
даже официальной поддержки в
transformers, приходится регистрировать архитектуру вручную.На 12 ГБ твой единственный вариант — GGUF (через llama.cpp). Там есть магия RAM Offloading: можно закинуть 10 ГБ модели в видеопамять, а остаток — в обычную оперативку. Скорость просядет, но "мозги" 31B будут работать на полную.
А 24 ГБ я указал как порог для "комфортного полета" без костылей. Если хочешь потестить её мощь прямо сейчас и бесплатно — прыгай в Kaggle. Там дают 30 ГБ VRAM (2x T4), на которых я этот 4-битный дамп и собрал. Взлетает с полпинка!