Обновить

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

Самое лучшее безумие этого года )))

В остальных девяти Хиппо бодро начинает, а через пару фраз путает героев, ходит по кругу и теряет нить. Что ж, не очень умный — зато работает.

Ну это почти уровень GPT-2 на оборудовании из 80-х так-то. Сколько еще там есть места для оптимизации, интересно.

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

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

А если взять ZX Next в версии с эмуляцией Z80 на частоте 28 МГц и 4 МБ памяти?

На Next, помимо частоты и объема ОЗУ, есть еще и аппаратное умножение: одно умножение там занимает 8 тактов, а у меня шаг «умножить и прибавить» на таблицах стоит 52. Здесь можно было бы почти безболезненно увеличить контекстное окно до 256 токенов (сейчас Hippo помнит только 64). Думаю, абзац связного, хоть и простого текста более чем реален. В моих экспериментах любое заметное на глаз улучшение генерации стоило либо полсекунды на токен, либо 20–30% ОЗУ. Можно представить, сколько таких шажков можно сделать на Next, но это уже совсем другая лига. Мне был интересен именно обычный 128K, где нет ни памяти, ни умножения.

Вроде как пишут, что один такт умножение занимает.

Скрытый текст

В ZX Spectrum Next для умножения используется инструкция MUL. Она выполняет беззнаковое 8×8-битное умножение: перемножает значения из 8-битных регистров D и E, а 16-битный результат сохраняет в паре регистров DE.

Ключевое преимущество перед стандартными возможностями оригинального Z80: эта инструкция выполняется за один такт (за 8 T-состояний). В оригинальном ZX Spectrum Spectrum такой аппаратной поддержки не было — умножение реализовывалось программно, в цикле, что занимало значительно больше времени.

Как это использовать

В проектах вроде z80nextlibrary есть готовые подпрограммы умножения, которые напрямую задействуют MUL для максимальной скорости. Например, для 8×8-битного умножения можно вызвать функцию, которая подставляет эту инструкцию, что даёт прирост производительности примерно на 85% по сравнению с обычными реализациями для стандартного Z80.

При этом важно понимать: MUL работает только с 8×8-битными числами. Для 16-битного умножения (например, 16×8 или 16×16) всё равно придётся писать или подбирать готовую подпрограмму.

Если вы пишете ассемблерный код под Spectrum Next и нужно быстро перемножить числа — смело ориентируйтесь на эту инструкцию.

Спасибо, не знал про такое. Интересно, много ли игр для Next, которые этот MUL используют?

Next это FPGA-эмулятор стоящий как крыло самолёта и со своими ни с чем не совместимыми изобретениями. Интересен он только эмуляторщикам и 3,5 реальным пользователям в РФ. Однако есть отечественные клоны спектрума с памятью от 256К до 4М, которыми действительно пользуются ретро-компьютерщики. Поэтому увидеть релизы под разные объёмы памяти было бы интересно. HippoGPT потрясающе работает, но сказки вообще никак нерелевантны вводу)) Возможно при большем числе токенов и весов, это изменится?

Рядом с моделью живет ее точная копия на Python, которая считает в тех же целых числах, с теми же сдвигами и округлениями. Код для Z80 сверяется с ней в симуляторе до бита, и сказка из 200 токенов совпадает до последней буквы.

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

Две ошибки, найденные случайно

Я дискетировал в scl выложенный tap-файл там же на ZX-Art, а затем увидел что уже есть ваш оригинальный trd существующий отдельно. По хорошему его надо слить с основным релизом. Для пользователей в РФ интересен, конечно, только TR-DOS, а это trd/scl. У нас даже были изобретены эмуляторы дисковода с SD-карты, эволюционировавшие в дальнейшем в Gotek продаваемый китайцами на Aliexpress. Оказавшийся полезным в итоге, не только для TR-DOS.

И здесь есть два момента: грузить картинку "как есть" можно, но не модно. Потому что видно как она прорисовывается при загрузке и это лишнее ожидание. Поэтому запаковал её с эффектом и она стала весить 1367 байт, т.е. 6 секторов на диске вместо 27. В коде вероятно есть ещё ошибки. В основном коде по адресу #6DC5 стоит CALL #6E96, это вызов подпрограммы обработки температуры, которая начинается с #6E46. Таким образом переходит переход в середину этой подпрограммы, а не в её начало. По итогу всё работает, но выглядит странно и могло плохо закончиться, потому что влетает в POP HL:

6E94: 32 7E 76      LD (#767E),A        ; восстановить цвет
6E97: E1            POP HL
6E98: 22 7F 76      LD (#767F),HL       ; восстановить указатель
6E9B: C9            RET

Однако есть отечественные клоны спектрума с памятью от 256К до 4М, которыми действительно пользуются ретро-компьютерщики

У самого когда-то был Profi 512 :-) Хорошо, я попробую собрать несколько прототипов под разные конфигурации Scropion 256 / Profit 512 и “турбо-кнопке” с 7МГц. Попробую поиграться с контекстным окном, размерами таблицы эмбеддингов и весами. Выберу, где будет самый приятный результат.

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

Ок, выложу на Github после экспериментов со Scorpion/Profi. По дискете услышал

Сделал версию 1.1. Для машин с памятью от 256K (Scorpion ZS-256 и 1024, Pentagon 512, Profi и др.) появилась версия 256. В ней первые 16 токенов сказки, то есть затравка, навсегда остаются в памяти внимания. Тему затравки она держит заметно лучше, а Тим с радугой влезают в чужие сказки в четыре раза реже. Пишет она почти так же быстро, около 4,2 секунды на токен. Обе версии лежат на одной дискете TRD и SCL. Загрузчик сам определяет машину по тому, как она переключает страницы памяти, и грузит нужную версию, а внизу экрана видно «v1.1 128K» или «v1.1 256K». Дискета лежит на ZX Art, а исходники, обученные модели и подробная инструкция по сборке и обучению открыты на GitHub: https://github.com/Chegleyev/HippoGPT.

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

Публикации