Обновить

Как засунуть 62ГБ в 15ГБ и не сойти с ума: Партизанский MLOps на примере Gemma 4 31B

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели9.8K
Всего голосов 6: ↑6 и ↓0+8
Комментарии15

Комментарии 15

на обычной это какой объем минимальный видеопамяти?

Вот расклад по видеопамяти (VRAM):

  1. Порог вхождения (20–24 ГБ VRAM): Это идеальный вариант. RTX 3090 или 4090 — наши фавориты. Модель залетает целиком, остается место под KV-кэш (контекст) и активации. Будет летать.

  2. На грани (16 ГБ VRAM): На какой-нибудь RTX 4080 или 4070 Ti Super модель целиком не влезет (не хватит буквально 2-3 ГБ). Придется использовать CPU Offloading (выносить часть слоев в обычную оперативку). Работать будет, но скорость упадет с 40-50 токенов/сек до 2-5 токенов/сек.

  3. Ghetto-стайл (8–12 ГБ VRAM): На «народных» картах типа RTX 3060 завести можно только через GGUF (llama.cpp) с жестким разделением слоев между GPU и RAM.

Итог: Если хочешь комфортно «летать» без тормозов — нужно 24 ГБ. Если готов чуть подождать — хватит и 16 ГБ с небольшим костылем в коде

Минусаторам привет. Вес модели в репозитории — 18.3 GB в формате .safetensors (NF4). Математика: 18.3 ГБ веса + ~1-2 ГБ на активации = 20 ГБ. RTX 3090/4090 справляются. Пруф веса в моем профиле на HF

Это не обычная видеокарта.)

24 гига это не сказать что обычная видеокарта. У меня к сожалению всего 12 гиг

тогда костыли в коде нужны сам на бесплатном keggle запускаю gemma 4 настолько свежая что у нее нет

даже официальной поддержки в transformers , приходится регистрировать архитектуру вручную.

На 12 ГБ твой единственный вариант — GGUF (через llama.cpp). Там есть магия RAM Offloading: можно закинуть 10 ГБ модели в видеопамять, а остаток — в обычную оперативку. Скорость просядет, но "мозги" 31B будут работать на полную.

А 24 ГБ я указал как порог для "комфортного полета" без костылей. Если хочешь потестить её мощь прямо сейчас и бесплатно — прыгай в Kaggle. Там дают 30 ГБ VRAM (2x T4), на которых я этот 4-битный дамп и собрал. Взлетает с полпинка!

НЛО прилетело и опубликовало эту надпись здесь

Вообще-то здесь статья про квантование 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 Учи матчасть и переходи на нейросети! :-)

НЛО прилетело и опубликовало эту надпись здесь

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

Привет! Т4 — это серверные видеокарты от Nvidia (по 16 ГБ видеопамяти). Бесплатно их раздают в Google Colab (дают 1 карту) и в Kaggle (дают сразу 2 карты = 30 ГБ VRAM). Заходишь на Kaggle, жмешь Create Notebook, и в настройках справа выбираешь Accelerator -> GPU T4x2.

Надолго бесплатно? Есть ли лимиты?

в Kaggle 30 часов в неделю на одном аккаунте

А почему нельзя скачать сразу квантованную модель? Зачем возиться с float16, тратя время на перепаковку.

Квантованные модели не растут на деревьях. Пока комьюнити ждет, когда кто-то с мощным железом соизволит сделать GGUF-сборку и залить на HuggingFace, мы делаем это сами из желудей и палок на бесплатных серверах Kaggle. 62 ГБ сырого float16 нужно было протащить через игольное ушко 15 ГБ видеопамяти и перепаковать в 4-битный NF4. Собственно, мы эту тропу и прорубили. Теперь — да, можно просто качать

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации