Новости
May 11

🤖 Нейронки уже сами себе данные для обучения готовят? ByteDance и их Seed-Coder

Кажется, мы дожили до времён, когда нейросетки не только код за нас пишут (ну, или пытаются), но и начинают самостоятельно решать, на каких данных им лучше обучаться. ByteDance, да-да, те самые ребята, что подарили миру TikTok, выкатили Seed-Coder – целую семейку open-source LLM на 8 миллиардов параметров, специально заточенных под код.

И знаете, что самое интересное? Не очередные заявления про "SOTA-производительность" (хотя и без этого не обошлось, куда уж там), а их подход к подготовке данных. Они это называют красиво – модель-центричный пайплайн. Звучит, как всегда, заумно, но суть проста.

Вместо того чтобы толпа людей корпела над созданием хитрых правил и фильтров для отсева "плохого" кода из гигантских датасетов, эти ребята решили: "А пусть другая нейронка этим занимается!" 🤯

Суть подхода: Специально обученная LLM (да, ещё одна!) сама анализирует код из разных источников (GitHub, коммиты, код из веба) и выносит вердикт – годнота или мусор. Минимизация ручного труда, максимальная автоматизация. Ну, или просто вселенская лень разработчиков в очередной раз двигает прогресс, тут уж как посмотреть 🌚.

Они даже приводят примеры, где их LLM-фильтр якобы умнее традиционных правил:
1️⃣ Случай с Пикачу: Какой-нибудь Python-сниппет с кучей цифр (например, для вывода картинки на LED-дисплей) обычные фильтры бы заклеймили как "подозрительный" из-за высокого соотношения цифр к символам. А LLM-фильтр такой: "Не-не, тут всё осмысленно, показываем Пикачу!" ✅

2️⃣ Красивый, но гнилой код: А вот идеально отформатированный скрипт, который на первый взгляд выглядит прилично, но содержит логическую ошибку (if temp < 0 and temp > 1 – классика!) и врёт в докстринге (обещает вернуть строку, а возвращает None). Правила бы пропустили, а LLM-фильтр: "Пардон, это брак!" ❌

Конечно, это всё со слов разработчиков, но сама идея, что модель учится отбирать для себя качественные данные, звучит интригующе.

Интересный момент: для фильтрации данных использовали специально обученную LLM, а потом на отфильтрованных данных обучали уже основную модель. Это как если бы студенты сами писали для себя идеальные учебники, а потом по ним же и учились. Эффективно? Возможно. Но не приведёт ли это к какому-то "эхо-камерному" обучению, где модель усиливает свои же (или своего создателя) представления о "хорошем коде"? Вопрос открытый.

Что по мощностям и версиям?

Итак, что же нам предлагают под вывеской Seed-Coder (кстати, раньше проект звался Doubao-Coder, если кому интересно):

  • Seed-Coder-8B-Base: Фундамент, на котором всё построено. Предобучена на их "модель-центричных" данных.
  • Seed-Coder-8B-Instruct: Эта версия уже заточена под повседневные инженерные нужды. Обещают, что она уделывает аналогичные по размеру модели (около 8B параметров) и даже некоторых "тяжеловесов" на таких бенчмарках, как SWE-bench Verified и Multi-SWE-bench mini.
  • Seed-Coder-8B-Reasoning: Для любителей задач посложнее, вроде соревновательного программирования. Говорят, показывает зубы на IOI'2024, обходя Qwen-32B и DeepSeek-R1, и даже на Codeforces не пасёт задних.

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

Как пощупать эту прелесть?

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

👉🏻 С помощью transformers:
Классика жанра. Вот вам примерчик для Seed-Coder-8B-Instruct:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "ByteDance-Seed/Seed-Coder-8B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True)

messages = [
    {"role": "user", "content": "Write a quick sort algorithm in Python."},
]

input_ids = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    return_tensors="pt",
    add_generation_prompt=True,  
).to(model.device)

outputs = model.generate(input_ids, max_new_tokens=512)
response = tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True)
print(response)

👉🏻 С помощью vLLM:
Для тех, кто хочет побыстрее и помощнее. Seed-Coder-8B-Instruct полностью поддерживается vLLM.
Пример для оффлайн батч-инференса:

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

# Initialize the tokenizer
tokenizer = AutoTokenizer.from_pretrained("ByteDance-Seed/Seed-Coder-8B-Instruct")

# Pass the default decoding hyperparameters
sampling_params = SamplingParams(temperature=0.6, top_p=0.8, repetition_penalty=1.05, max_tokens=512)

# Input the model name or path
llm = LLM(model="ByteDance-Seed/Seed-Coder-8B-Instruct")

# Prepare your prompts
prompt = "#write a quick sort algorithm in Python."

# generate outputs
outputs = llm.generate([prompt], sampling_params)

# Print the outputs.
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}\n\nGenerated content: {generated_text!r}")

А для тех, у кого GPU-фермы простаивают, есть и поддержка tensor_parallel_size для распределенного инференса.


Прозрачность или очередной маркетинговый булшит? 🤔

ByteDance заявляют, что они "открыто делятся деталями" своего пайплайна. И это, конечно, похвально. Технический отчет на GitHub имеется, можно почитать на досуге.

Однако, как это часто бывает, сам чудо-датасет, отфильтрованный LLM-ами, нам, конечно же, не показали. Ну а кто бы сомневался? 🤷🏻‍♂️

Так что, опять революция или просто очередная моделька?

Конечно, каждая новая "SOTA" модель вызывает волну обсуждений. Seed-Coder интересен в первую очередь своим подходом к данным. Если LLM действительно могут эффективно и, главное, качественно курировать обучающие данные для самих себя, это может серьезно изменить ландшафт разработки ИИ. Меньше рутины для людей, больше... ну, чего-то другого для людей.

С одной стороны, это шаг к большей автономности ИИ-систем. С другой – не теряем ли мы контроль и понимание того, чему именно учатся наши модели, если они сами себе "воспитатели"?

Команда ByteDance Seed Team, основанная в 2023, заявляет о своих амбициях стать исследовательской командой мирового класса. Ну что ж, заявка неплохая.

Полезные ссылки: