12 июня 2024 г.

Свой личный ChatGPT: OLLAMA на локальном компьютере

Я считаю, что нынешнее взрывное развитие нейронных сетей это именно та вещь, которая приведёт наш мир к технологической сингулярности. Осталось буквально несколько лет, когда в недрах дата-центров мировых технологических гигантов заработает почти полноценный AI, который сможет заменять учёных, инженеров и изобретателей (ну и обычных программистов, конечно же). Такие вещи как Copilot и ChatGPT это технологии, которые поражали воображение 2 года назад и вот уже сейчас у нас есть сравнимые по эффективности технологии, которые могут полноценно работать не на серверах с профессиональными видеокартами Nvidia, а на самых обычных домашних компьютерах и видеокартах.

Любой пользователь с видеокартой последнего поколения (у меня RTX 4060 всего с 8 ГБ оперативной памяти и этой памяти уже откровенно не хватает) или достаточно мощным процессором может установить на свой компьютер средство запуска языковых моделей Ollama. К этому средству запуска полагается скачать языковую модель (LLM), благо программисты и корпорации постоянно выкатывают новые модели для открытых тестов. Вы можете скачать модель на 7 миллиардов (7B) параметров и она будет весить всего 5 ГБ (в среднем), а можете замахнуться на самую подробную модель и там вес будет около 50 ГБ и они будут очень медленными на обычной видеокарте. У меня быстро работают только 7B модели, потому что они полностью помещаются в память видеокарты. Для своих экспериментов я выбрал три популярные и новые модели в размере 7B и 8B: gemma (модель от Гугла), qwen2 (от китайской компании Alibaba, умеет общаться на разных языках) и codestral (создана на основе популярной mistral, но оптимизированная под задачи программистов, весит 22B и 13 ГБ, так что желательно иметь много видеопамяти и ОЗУ). 

Сама программа ollama относительно недавно начала работать с Windows, а до этого радовала только пользователей Linux и macOS, так же весной 2024 года была добавлена поддержка карт от AMD. Скачиваем дистрибутив с официального сайта и начинаем работать в командной строке, хотя я предварительно через системные переменные менял путь для скаченных моделей, чтобы они не качались мне на системный диск (как это сделать написано в документации, это не сложно). 

Ollama запущенная в терминале
После этого командой ollama run <Название модели> качаем и запускаем её в работу, но работать из терминала довольно неудобно, поэтому нам нужен фронтенд. Можно ещё запустить диспетчер задач и проверить, что ollama при генерации ответа использует именно GPU, а не CPU и занимает видеопамять карты. GUI есть разные, но самые популярные из них весьма навороченные и требуют запуска гигабайтного образа docker с кучей работающих сервисов, написанных на самых разных языках программирования.
Запущенный в браузере фронтенд Page Assist для общения с языковой моделью
И я хоть сам фронтендер, но поднимать такие проекты ради запуска обычного чата мне было откровенно лень, поэтому для себя я нашёл очень простое расширение для браузера Page Assist, которое даже умеет пускать ваши модели в открытый интернет, чтобы они там искали себе информацию, фильтровали её и выдавали вам ответ. Есть ещё более красивый проект чата Msty, но по каким-то причинам он отвечал у меня только на один вопрос, после чего всё зависало. В качестве аналога чат-приложения ещё можно попробовать десктопное приложение AnythingLLM, которое умеет подключаться к самым разным AI-движкам и имеет много настроек.
Запущенный в VS Code Twinny успешно объясняет, что делает этот код
Для того, чтобы подружить языковую модель с редактором кода, я использовал расширение под названием Twinny. Данное расширение не только умеет рефакторить код, но и поддерживает автодополнение с полноценным чатом, где вы можете общаться со своей моделью и она будет понимать контекст задачи (сканировать файлы проекта). Как видите, нейросети проделали очень большой путь со времён первых версий Copilot и таких штук как Tabnine, и их работа лично для меня похожа на маленькое чудо, хотя по факту это же просто продвинутый T9. 
Модель codestral правильно отвечает на каверзный вопрос по Javascript, а вот модель qwen2 его не осилила. 
Страшно сказать, но нейросети и ChatGPT настолько плотно входят в нашу жизнь, что уже сейчас есть молодые программисты, которые не используют поисковик, не читают документацию (а некоторые даже не учат английский язык, потому что AI отлично понимает почти все популярные языки мира), а просто задают вопросы нейросети и она почти в 90% случаев правильно отвечает, а они эти знания используют для обучения и успешного прохождения собеседований. Да что уж там говорить, если ChatGPT 4 версии сама без проблем может пройти собеседование на junior программиста - это ответ на вопрос, как скоро нейросети заменят их: в некоторых задачах они способны сделать это прямо сейчас (буквально один начинающий программист для бизнеса равен стоимости видеокарты для запуска нейросетки). Тут конечно всегда надо помнить, что если языковая модель не знает правильного ответа на вопрос, то она запросто начинает "галлюцинировать" и уверенно рассказывать несуществующие вещи и настоящему "кожаному" программисту всегда надо быть настороже, а для некоторых такое поведение инструмента вовсе недопустимо и они будут всё делать вручную, полагаясь только на свой опыт и экспертизу. 
Лучше ли бесплатные локальные модели Ollama того, что предоставляют крупные корпорации? Нет, всё таки у коммерческих моделей огромный пласт "знаний" и технологий под капотом, но модели для ollama уже сейчас могут в работе заменять Copilot (за счёт безопасной работы на локальном компьютере), ChatGPT 3.5 и AI поиск от Bing, тем более данные инструменты заблокированы для российских пользователей и требуют обхода блокировок. 

Ollama и языковые модели это невероятно крутой инструмент для всех программистов, им определённо можно и нужно пользоваться, но я бы предостерёг начинающих программистов от слепого доверия тому, что они выдают в качестве ответов. И уж точно не надо "жульничать" при написании своих первых программ, когда вы только начали учиться программировать: вы должны сами набить все шишки и разбираться в том, как работает или не работает код. 

4 июня 2024 г.

Шрифт Maple Mono

В большинстве случаев программисты используют в своих редакторах кода шрифты типа Fira Code или JetBrains Mono (самый лучший вариант, на мой взгляд), кто-то использует Cascadia Code от Microsoft, а пользователи macOS даже и этим не заморачиваются и чаще всего не меняют системные шрифты. Собственно так поступал и я, а редкие эксперименты со шрифтами убедили меня, что лучше чем эти самые популярные шрифты сделать очень трудно. Дело в том, что разработка шрифта вообще очень затратное по времени и деньгам занятие, а специалист разрабатывающий шрифт для редактора кода должен быть не только умелым дизайнером, понимающим в разработке шрифтов и особенностях их рендеринга на самых разных устройствах и экранах, но и профессиональным программистом, прочитавшим километры не текста, а именно кода. 

Товар лицом в фирменной теме от автора шрифта

Каково же было моё удивление, когда я увидел и установил шрифт Maple Mono от одного китайского разработчика! Невероятно продуктивный программист судя по его гитхабу, но он даже не указал своего имени. Это не только невероятно качественный и приятный шрифт для редактора кода, но он уже из коробки содержит все нужные для программирования лигатуры (есть даже специальные глифы для использования шрифта в терминале). Автор шрифта не просто взял за основу уже существующий шрифт Maple от Adobe (оригинал), а полностью разработал собственный вариант, но он на этом не остановился и ещё сделал локализацию шрифта для китайских пользователей (даже не представляю сколько там иероглифов нужно было нарисовать). Китайские программисты в очередной раз удивляют своей работоспособностью и талантом, но к сожалению их творения часто неизвестны за пределами Китая, потому что китайские программисты редко публикуются на сервисах западных компаний и вообще английского языка (стандартный язык для международного общения) избегают даже на GitHub в документации. 

Тема редактора Maple

В общем Maple Mono теперь в тройке моих самых любимых шрифтов для программирования вместе с Fira Code и JetBrains Mono. Этот шрифт я всячески рекомендую попробовать. У автора шрифта имеется ещё и тема для редактора VS Code, которая выглядит приятно и заслуживает того, чтобы поселиться в вашем редакторе.

P.S.: у меня IPS монитор с диагональю 27 дюймов и с разрешением 1440p (что-то около Retina), поэтому есть особенности с отображением шрифтов.