Raspberry-LLM - Making My Raspberry Pico a Little Smarter
Юджин Ян описывает свой эксперимент raspberry-llm: Raspberry Pico с e-ink экраном, который получает RSS-ленты WSJ и HackerNews, обращается к сторонним LLM API и генерирует контент в разных стилях — от рифм в духе Доктора Сьюза до фейковых цитат знаменитостей и троллинговых комментариев в духе HackerNews. Проект начался с рифмованных часов и постепенно разросся. Главным вызовом стала работа всего с 8 КБ памяти на Micro Python, из-за чего привычные библиотеки вроде json и xmltodict оказались недоступны. Автору пришлось парсить RSS-ленты посимвольно, отслеживать потребление памяти на каждом шаге и активно использовать gc.collect(). Код доступен на GitHub — достаточно склонировать репозиторий и прописать свои Wi-Fi и OpenAI credentials в secrets.py.
Raspberry-LLM — как я сделал свой Raspberry Pico немного умнее
Продолжая свои эксперименты с большими языковыми моделями, я задумался, как их можно использовать в условиях ограниченных ресурсов — например, в бытовой технике или на Raspberry Pico. Мне также было любопытно, насколько хорошо они справляются с генерацией контента в определённом стиле (скажем, Доктора Сьюза), с юмором (фейковые цитаты из WSJ) и с токсичными высказываниями (комментарии троллей с HackerNews).
Чтобы удовлетворить своё любопытство, я собрал raspberry-llm (Github). Это простой Raspberry Pico с e-ink экраном, который обращается к RSS-лентам WSJ и HackerNews, дёргает сторонние LLM API и генерирует контент. Всё началось с рифмующихся часов, а дальше… ну, сами увидите.
• • •
Кто-то LLM применяет, чтоб целые рынки взрывать,
Кто-то плагины к ChatGPT мастерит, чтоб границы менять.
А я тут с Raspberry Pi сижу, ни шатко, ни валко,
И стилем Доктора Сьюза новости пересказать пытаюсь жалко.
Иногда выходит остроумно, не зря,
Фейковые цитаты звёзд сочиняет, бля.
Может прикинуться троллем с HackerNews,
Кидаться злыми комментами, будто бы он не лез.
Всё началось с того, чтоб время сказать умело,
С маленькой странностью, с рифмой — несмело.
• • •
В целом это был забавный опыт — учиться работать всего с 8 КБ памяти(!) и Micro Python. Из-за ограничений по памяти привычные библиотеки (например, json, xmltodict) на Pico недоступны. Да даже если бы и были, я всё равно не смог бы загрузить всю RSS-ленту в память целиком, чтобы потом распарсить её через xmltodict.parse().
В итоге пришлось парсить RSS-ленты посимвольно, разбираться, сколько памяти потребляется на каждом шаге, и активно вызывать gc.collect(). А ещё было интересно научиться рисовать на e-ink экране (вспомогательные функции сделали это проще, чем я ожидал).
Чтобы попробовать самому, склонируйте этот GitHub-репозиторий и пропишите свои данные Wi-Fi и OpenAI в secrets.py.
Промпт для OG-картинки в MidJourney: «An e-ink display connected to a raspberry pi displaying some text –ar 2:1»
Если этот материал оказался полезным, ссылайтесь на него так:
Yan, Ziyou. (Apr 2023). Raspberry-LLM - Making My Raspberry Pico a Little Smarter. eugeneyan.com. https://eugeneyan.com/writing/raspberry-llm/.
или
@article{yan2023raspberry, title = {Raspberry-LLM - Making My Raspberry Pico a Little Smarter}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2023}, month = {Apr}, url = {https://eugeneyan.com/writing/raspberry-llm/} }
Присоединяйтесь к 11 800+ читателям, получающим новости о machine learning, RecSys, LLM и инженерии.