«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я сделал TabbyAPI

Почему я сделал TabbyAPI

Опубликовано 29 августа 2024 г.
Просматривать:607

Фото на обложке: Джейсон Люн на Unsplash

Это, вероятно, первый из многих постов на тему «почему я это сделал», который объясняет мои доводы в пользу создания программного обеспечения и более глубокого погружения в будущие улучшения.

Сегодня я собираюсь сосредоточиться на моем самом популярном проекте — TabbyAPI. TabbyAPI — это сервер FastAPI на основе Python, который позволяет пользователям взаимодействовать с моделями большого языка (или LLM) с использованием библиотеки ExllamaV2 и соответствует спецификации OpenAI API.

Если вы не уверены, что означает какое-либо из этих слов, вы не в сфере ИИ. Но это нормально! Цель этой статьи — объяснить мой опыт, не забрасывая вас всей кухонной раковиной терминов, связанных с искусственным интеллектом.

Начало

Позвольте мне вернуться в ноябрь 2023 года. Искусственный интеллект процветал, компании выпускали модели направо и налево, а шумихе, казалось, нет конца. Кажется, я говорю о периоде времени, который был в древние времена, но тогда каждый день ощущался как целый месяц инноваций.

Под натиском этих новых технологий я сосредоточился на их использовании на своем ничтожном 3090ti. Да, «мизерность» — правильное слово, поскольку 24 ГБ видеопамяти на видеокарте — это начальный уровень для работы большинства моделей искусственного интеллекта. В то время использование квантованных версий моделей было нормой. Квантование аналогично сжатию, которое позволяет пользователям запускать эти массивные модели на потребительских графических процессорах.

Формат, который мне полюбился, — exl2, формат, ориентированный на скорость, оптимизацию и максимальное использование видеокарты. и токены генерировались со скоростью звука. Так что этот формат великолепен! В чем проблема?

Проблема заключается в запуске модели. Exl2 является частью библиотеки ExllamaV2, но для запуска модели пользователю необходим сервер API. Единственным вариантом было использование text-generation-webui (TGW), программы, которая объединяла все доступные загрузчики в веб-интерфейс Gradio. Gradio — это распространенная среда пользовательского интерфейса «строительных блоков» для разработки на Python, которая часто используется для приложений искусственного интеллекта. Эта установка была хороша какое-то время, пока не перестала.

По сути, основной причиной создания Табби было раздражение. Я устал от объема работы, необходимой для загрузки одной модели. Не говоря уже о накладных расходах Gradio и огромном количестве зависимостей от TGW. Я уважаю разработчика, но хотя TGW и хорош для многих людей, которым нужно универсальное решение, мне он не подошёл.

План…

Why I made TabbyAPI
Фото Гленна Карстенс-Питерса на Unsplash

просто. Создайте сервер API, который может разместиться на моем компьютере и не требует большого количества раздувания для запуска. Звучит просто, но смогу ли я это сделать? У меня нет большого опыта в теории моделей искусственного интеллекта, но у меня есть большой опыт создания серверных серверов и понимания дизайна API.

Поэтому мне нужен был кто-то, кто мог бы помочь, но кто? Введите турбодерпа, человека, стоящего за ExllamaV2. Он почти все знает о том, как работают модели, с тех пор, как создал библиотеку, что отлично сочетается с моими знаниями API. Кроме того, к нам присоединился еще один заинтересованный человек по имени Сплайс из-за его опыта работы с Python. Вместе мы втроем запустили TabbyAPI.

Но был ли план на самом деле так прост? Ну, типа того. Хотя у меня были люди для этой работы, мои знания в области Python и серверов API были практически нулевыми. В итоге я начал использовать инфраструктуру веб-сервера под названием FastAPI, которая значительно облегчила мне жизнь. Он также очень популярен в сообществе Python и хорошо документирован.

После нескольких дней использования FastAPI я увлекся написанием кода веб-сервера на Python. Документация очень хорошая, в Интернете есть много примеров, и разработчики восприимчивы к отзывам. В целом сообщество гостеприимное, и мне бы хотелось чаще использовать Python для работы в сети.

Через несколько недель я почувствовал, что все готово для публичного развертывания, и решил выпустить все наилучшим доступным мне способом. YOLO и перенесите все на GitHub.

Проблемы и еще проблемы

При выпуске проекта с открытым исходным кодом для всего мира ожидайте проблем… множество проблем. У людей всегда есть варианты использования, в которые утилита не вписывается. Поскольку Tabby является внутренним сервером, многие из этих случаев возникали. В этом посте я упомяну лишь несколько вещей, с которыми мне поначалу было трудно справиться.

Большой проблемой было то, что я выпустил Табби в середине хайпа вокруг RAG. RAG означает «Поисковая дополненная генерация» или использование внешних документов в дополнение к знаниям LLM при получении ответа. Проблема заключалась в том, что эти новые методы (такие как вызов функций) требуют совершенно других конечных точек API и способов выполнения задач.

Кроме того, практически нет документации о том, как эти функции на самом деле работают на серверной части. По сей день я не реализовал вызов инструментов OpenAI, поскольку понятия не имею, как они работают. К сожалению, отсутствие документации является обычным явлением в мире искусственного интеллекта и ограничивает возможности разработчиков реализовывать код в своих проектах без предварительного сбора большого количества информации.

Еще одна проблема, которая длилась несколько месяцев, — создание многопользовательской среды. Оказывается, обработка распределенных запросов на сервере — непростая тема для разработчика. FastAPI обеспечивает поддержку этого типа рабочей нагрузки, но Tabby был написан с использованием синхронного кода. Это означало, что мне пришлось изучить асинхронное программирование на Python (что, безусловно, непросто).

Хуже всего то, что разработчики ИИ не любят асинхронный Python, в то время как сетевые серверы его поддерживают. Это означает, что мне пришлось научиться взаимодействовать между асинхронными и синхронными библиотеками в форме потоков. Это еще более глубокое погружение в понимание проблем потоковой обработки Python и того, почему вообще существует асинхронная модель. Я расскажу обо всем этом в другом посте, но, надеюсь, это объясняет объем знаний, которые мне пришлось пройти за 2–3 месяца, борясь с этими проблемами.

В конце концов, мы с Turbo вместе работали над созданием лучшего генератора в библиотеке ExllamaV2, который устранил все проблемы многопользовательской работы и странные ошибки в библиотеках потоков. Спустя 9 месяцев можно с уверенностью сказать, что Tabby наконец-то стала стабильной программой для запуска моделей.

Выгорание

Why I made TabbyAPI
Фото Энни Спратт на Unsplash

За все время разработки программного обеспечения у меня ни разу не было периода выгорания. В это трудно поверить, поскольку выгорание — обычное явление в мире программного обеспечения, но последние 6 лет мне всегда хотелось что-нибудь написать. Программирование — мое любимое занятие, которое помогает мне избежать стресса дня.

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

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

Во время перерыва я проводил время вдали от Табби и больше времени наслаждался летними каникулами. На самом деле я работал над некоторыми старыми проектами приложений для iOS и проводил время со своей семьей. Сейчас я снова возвращаюсь к разработке Табби. Те голосовые звонки, в которых я раньше участвовал, вероятно, не будут происходить в течение долгого времени из-за угасания ажиотажа вокруг ИИ. Это непростая пилюля, но я нашел разные мотивы для продолжения разработки.

Уроки, которые я усвоил

Тэбби был моим первым проектом LLM. Каким-то образом это имя стало популярным в сообществе, и меня бросили в самые глубины управления. Зная это, вот несколько мыслей, которые я почерпнул из этого опыта.

Знайте, кого вы хотите угодить: любой может использовать проект с открытым исходным кодом. Что касается Табби, я отдаю предпочтение функциям, которые повысят простоту использования проекта, моих друзей и меня самого. Контролируя эту философию, я могу управлять своим графиком и знать, над какими функциями работать.

Поймите свои пределы: выгорание — это не весело. Не делайте то, что сделал я, и не унижайте себя из-за того, что у пользователя в который раз возникла проблема. Если когда-нибудь проявятся чувства разочарования, гнева или скуки, сделайте перерыв. Хорошо время от времени расслабляться.

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

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

Я, вероятно, подробно расскажу об этом в другой статье, поскольку это может быть отдельная тема, но я чувствую, что работа над «Табби» дала мне больше понимания того, как я хочу, чтобы мои проекты работали. Кроме того, мои знания о сообществе открытого исходного кода расширились.

Что ждет будущее

Я благодарен всем людям, которые ежедневно вносят свой вклад и дают предложения по улучшению TabbyAPI и ExllamaV2. Каждый помогает совершенствовать и улучшать программы, чтобы они лучше работали для общего использования. Я один человек, и помощь требует от меня много усилий.

В обозримом будущем я собираюсь сократить объем работы над «Табби». Проект по-прежнему развивается, и многие стремятся его улучшить, но мое психическое здоровье важнее, и перерывы в этом помогут.

Спасибо, что прочитали эту ретроспективу. Если вы хотите узнать больше обо мне и о том, чем я занимаюсь, посетите kingbri.dev.

Личный сайт Брайана Дэшора

Why I made TabbyAPI терояллаб / таббиAPI

OAI-совместимый API exllamav2, легкий и быстрый.

ТаббиAPI

Why I made TabbyAPIWhy I made TabbyAPIWhy I made TabbyAPI

Why I made TabbyAPI

Why I made TabbyAPI

Важный

Помимо README, пожалуйста, прочитайте страницу Wiki, чтобы узнать, как начать работу!

Примечание

Нужна помощь? Присоединяйтесь к серверу Discord и получите роль Табби. Пожалуйста, будьте вежливы, задавая вопросы.

Приложение на основе FastAPI, которое позволяет генерировать текст с использованием LLM (большая языковая модель) с использованием бэкэнда Exllamav2

Отказ от ответственности

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

TabbyAPI — это хобби-проект, предназначенный исключительно для небольшого количества пользователей. Он не предназначен для работы на производственных серверах. Для этого обратите внимание на другие серверные части, поддерживающие эти рабочие нагрузки.

Начиная

Важный

Этот README не предназначен для начала работы. Пожалуйста, прочитайте Wiki.

Для получения дополнительной информации прочтите Wiki. Он содержит пользовательскую документацию по установке, настройке, выборке, использованию API и многому другому.

Поддерживаемая модель

Просмотреть на GitHub
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/kingbri/why-i-made-tabbyapi-385f?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3