воскресенье, 12 октября 2025 г.

Мой тест SpikingBrain-7B на RTX 4090

    В общем, недавно вышла на гитхабе SpikingBrain-7B и я не мог её не протестировать. Почему именно её? Потому что для меня это первая реализация LLM поверх спайковых нейросетей, которые по-другому симулируют нейроны и где пока много экспериментов, но не так много во что можно по-серьёзному потыкать. Ну а ещё у неё относительно внятная инструкция по установке.

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

    Первые шаги идентичны (стоит правда поставить nvidia-container-toolkit и проверить, что он работает, а то GPU в контейнер не прокинется):

git clone https://github.com/BICLab/SpikingBrain-7B.git
cd SpikingBrain-7B
docker build -t spiking-brain:7b-v1.0 .
docker run -itd --entrypoint /bin/bash  --network host --name spiking-brain --shm-size 160g --gpus all --privileged -v /host_path:/container_path spiking-brain:7b-v1

Потом заходим внутрь контейнера:

docker exec -it  spiking-brain /bin/bash

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

modelscope download --model Panyuqi/V1-7B-sft-s3-reasoning

vllm serve /root/.cache/modelscope/hub/models/Panyuqi/V1-7B-sft-s3-reasoning --served-model-name V1-7B --gpu-memory-utilization 0.95 --block-size 32 --dtype bfloat16 --port 8080 --max-model-len 20000

Здесь внимательный читатель заметит, что я поставил высокий gpu utilization и порезал контекстное окно до 20 000 токенов (без ограничения там 131072). Это потому что нейронка упорно не хотела помещаться в GPU и падала по OOM.  Это, как мне кажется, немного ударило меня по рукам и я подозреваю, что некоторые галлюцинации я получил из-за bfloat16 и ограничения контекстного окна.

Здесь впрочем, не будет красивого окошка в браузере - в итоге гонять запросы приходится либо через сurl, либо через OpenAPI в chat completions, Впрочем документация на такое есть и довольно неплохая

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

Результаты можно посмотреть по ссылке.  Чтобы сэкономить время на чтение не самого интересного талмуда, пройдусь по ним.  

В принципе с примитивной математикой нейронка справилась на ура. Было смешно смотреть на то, как она думает, над тем, что понимается под сложением 2 и 2, но чего уж там - справилась. Хуже всего вышло с квадратным уравнением - я подозреваю что косяки в последних разрядах это именно артефакт bf16, но пруфов не дам. В целом ход рассуждения у неё всё же корректный. Интегрирование и дифференцирование на простом уровне - тоже норм.

Сценаристика - тут ситуация сложная. Во-первых трудно оценить, насколько внятные она сценарии пишет, потому что сама нейронка склонна пилить большие талмуды. Но результаты в целом мне понравились, с этим можно работать. Тест на условный "Сталкер", а также на сценарий специфического плохого современного фильма нейронка сдала - в принципе ок. А вот с катсценкой и маркетинговым материалом - явно есть ощущение, что контекст потерялся и всё стало плохо. Ну ок, это лучше чем ничего. Опять же, будь у меня H20/H100 ситуация, возможно. была бы и лучше.

С программированием нейронка справилась средне. Вектор на плюсах довольно такой себе, bimap вышел за пределы контекстного окна и не получился. Ещё хелловорлд на Rust и Axum прямо сильно получился,  для старого варианта фреймворка и пришлось сильно переделывать. Что получилось:

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


Комментариев нет:

Отправить комментарий