Made in …
В нашем сегодняшнем дайджесте не будет особенностей языка, библиотек и фреймворков. Предлагаем повысить насмотренность и взглянуть на приложения, созданные с помощью Go. В нашем меню: аналог MongoDB, приложение для превращения команд CLI в видео или гифку, а также порт модели LLaMa GPT.
FerretDB GA 1.0 released
«Свято место пусто не бывает» — эта поговорка актуальна во все времена. MongoDB создавалась как приложение с открытым исходным кодом, лицензируемым под GNU AGPL. Языковые драйверы распространялись по лицензии Apache. Инновация в чистом виде и одно из самых простых решений на рынке. MongoDB было легко использовать, она обладала качественной документацией и получила заслуженное внимание со стороны разработчиков.
Осенью 2018 года создатели MongoDB плотно занялись монетизацией своего продукта, отодвинув на задний план интересы сообщества open source. Copyleft-лицензия AGPL была заменена на SSPL, что сделало нецелесообразным создание DBaaS-версий MongoDB. Единственным вариантом оставалось приобретать коммерческую лицензию, что было невыгодно многим облачным провайдерам. Также они сделали собственную облачную версию MongoDB Atlas, работающую в рамках мультиоблака из AWS, Azure и GCP.
Естественной реакцией разработчиков открытого ПО стало создание полностью свободной альтернативы MongoDB. Проект получил название FerretDB. Он представляет собой stateless-прокси и преобразует протокол MongoDB в SQL, а в качестве движка использует PostgreSQL. Такая архитектура даёт совместимость с существующими драйверами MongoDB и позволяет использовать FerretDB в качестве полноценной замены. Это решение подойдёт и обычным пользователям, и облачным провайдерам для построения DBaaS-решений.
FerretDB создавался с упором на совместимость и производительность. Оригинальная MongoDB была разработана на «плюсах». FerretDB в качестве стека выбрал чистый Golang. Привычные инструменты, такие как mongosh, MongoDB Compass, NoSQL Booster или Mingo спокойно воспримут FerretDB и будут работать с ним, как с нативной инсталляцией MongoDB. Забавно, но гиганты вроде SAP сейчас работают над поддержкой FerretDB в HANA. Подробности читайте в блоге проекта.
CLI хоум видео
Создание визуальных материалов – это целое искусство. Особенно, если речь идёт о скучных командах консоли. Конечно, записать небольшой скринкаст и слепить из него гифку сможет любой технический писатель. Но хочется идеально, красиво и без запинок. Чтобы размер получившегося файла был адекватный, а качество приемлемым. К счастью, такой инструмент существует, называется VHS. Название полностью отражает смысл и воркфлоу. Вначале надо создать «кассету», затем записать на неё серию команд и пауз, вставить в проигрыватель и на выходе получить красоту.
Инструкция по установке VHS доступна в репозитории проекта на GitHub. Поддерживаются практически все операционные системы (Windows, Linux, macOS). Единственное, что слегка портит впечатление – приложение тянет за собой приличное количество зависимостей. Также VHS можно запустить внутри Docker-контейнера (сразу вместе со всеми зависимостями). После того, как VHS установлен, советуем сразу ознакомиться с коротким мануалом по командам:
vhs manual
Теперь можно приступать к подготовке нашей «кассеты». В Linux это будет выглядеть приблизительно так:
touch demo.tape
nano demo.tape
Теперь вводим команды, по которым будет пробегать терминал, формируя нужную нам GIF. В начале файла задаём формат вывода и некоторые настройки, а только потом команды, например:
# Where should we write the GIF?
Output demo.gif
# Set up a 1200x600 terminal with 46px font.
Set FontSize 46
Set Width 1200
Set Height 600
# Type a command in the terminal.
Type "echo 'Welcome to VHS!'"
# Pause for dramatic effect...
Sleep 500ms
# Run the command by pressing enter.
Enter
# Admire the output for a bit.
Sleep 5s
Сохраняем эту последовательность и запускаем файл на рендер:
vhs demo.tape
Поскольку в качестве выходного файла мы задали наименование demo.gif, этот файл появится в папке, откуда мы делали вызов:
Таким образом можно «на лету» создавать учебные и иллюстрационные материалы для баз знаний и статей. Помимо создания файлов «кассет» вручную, можно воспользоваться записью команд:
vhs record > cassette.tape
Приложение самостоятельно запишет все вводимые в терминале команды в файл. Его можно будет «причесать» вручную, проставив все необходимые паузы.
Отдельно стоит отметить, что получаемые файлы будут очень небольшого размера. Гифка выше занимает всего 84 Кбайта. Поскольку VHS создан на Golang, его можно кастомизировать, как душа пожелает. Репозиторий открыт всем желающим, так что не поленитесь поставить «звездочку» и взять на вооружение этот прекрасный инструмент.
LLaMA GPT на Go
Большие GPT-модели совершили прорыв и теперь удивляют нас своими способностями. Проблема лишь в том, что запустить такую модель на обычном компьютере не выйдет. Речь даже не об одном GPU, а о кластере из GPU, который позволит загрузить всю модель в VRAM и уже после этого приступать к работе. Поэтому такие модели крутятся где-то в дата-центрах по всему миру, а мы покупаем к ним временный доступ. Но что если хочется локальное решение, пускай даже оно не будет идеальным?
Такое решение есть — LLaMA. Эта модель была представлена в феврале 2023 года, обучена на 20 языках и существует в четырёх версиях:
- LLaMA-7B,
- LLaMA-13B,
- LLaMA-33B,
- LLaMA-65B.
Цифра в названии означает количество параметров (в млрд). Изначально её хотели предоставлять исключительно научным и учебным организациям, но волей судеб слили на торренты. С тех пор она стала доступна всем желающим. Самый известный и часто упоминаемый порт был создан на чистом С/С++ болгарским программистом Георгием Гергановым (Georgi Gerganov). Познакомиться с исходным кодом можно в репозитории проекта.
Мечтой большинства ML-хакеров стало вникнуть в суть (на сленге это называется «грокнуть») больших языковых моделей, не тратя кучу денег, используя лишь простое оборудование. Идея отказа от GPU легла в основу порта llama.go, созданного программистом Сергеем Гоцуляком (Serge Gotsuliak).
Кросс-платформенность, поддержка всех существующих моделей LLaMA и первый стабильный релиз — всё это лишь начало пути. Дальше запланирована разработка чата в реальном времени (аля ChatGPT), автозагрузка конвертированных моделей весов из интернета, увеличение скорости за счёт поддержки инструкций AVX2 и INT8-квантование, дабы большие модели помещались в тот же объём памяти. Работы — непочатый край, так что не забудьте поддержать автора звёздочкой.
Митапы
Go meetup
14 июня 2023
Летом мы встретимся на Go Meetup. Программа мероприятия формируется, но регистрация уже открыта. Кстати, вы уже можете подать доклад прямо в режиме онлайн. Заявки на участие спикера принимаются до 25 мая.
Интересуетесь нашими мероприятиями? В Telegram-канале Evrone meetups мы выкладываем анонсы с подробными описаниями докладов, а также студийные записи прошедших митапов. Тем для кого выступать в новинку, мы оказываем всяческую поддержку и помогаем оформить экспертизу в яркое выступление. Подписывайтесь и пишите @andrew_aquariuss, чтобы узнать подробности.
Вакансии
Удаленка / Офис
Evrone
Мы открыты для новых Go-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах и выступления на конференциях, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.