Приветствие

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

это моя первая статья, надеюсь не последняя - думаю станет ясно после появления первых комментариев - надеюсь я не как Джерри из "Рик и Морти"(где он всю ночь ждал оставившего негативный комментарий), впереди есть еще идеи. В этой же статье хочу описать свой путь пройденный для некоторого погружения в изучение и последующего проведения испытаний с нейронными сетями вроде ChatGPT. Явно описывать как из России сейчас подключиться к Канаде с использованием заветных трех букв и тому подобные телодвижения смысла не вижу, так как вероятно следующие за прогрессом уже давно все это перепробовали, и убедились что да, ChatGPT ответит на ваши заветные вопросы ответом типа: я лишь реализация нейронной сети созданная для возможностей развития, и тому подобное, а позже и облегченно выдохнули, мол время еще есть не такой умный уж код она и пишет, за работу можно(или нет?) не переживать... Этой статьей я хотел сократить или перенаправить на большую продуктивность время соискателя знаний в этом направлении.

Самое начало

В первые с нейронными сетями я столкнулся еще очень давно, при чтении книги:

папка с этой книгой у меня прямо так и называется: лучшая книга по ии
папка с этой книгой у меня прямо так и называется: лучшая книга по ии

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

Следующими я изучал способы обучения(с учителем/без), кроме информации от одного из разработчиков тут скорее использовать проще google или статьи тут же на Хабре, таковых очень много приводить не буду, однако по работе сверточных сетей очень долго искал какого-то визуального представления, нашел где-то на сайтах по пути видео этот процесс невероятно классно иллюстрирующее, могу дать ссылку на него в моих закромах в контакте. Еще можно на github посмотреть опенсоурс проекты на родном вам языке реализующие эти самые подходы обучения. Очень просто о сложном.

Огромные прыжки в будущее

Первой большой библиотекой нейронных сетей которую я применил стала TensorFlow, ее я прикрутил на java к проекту, в котором с другом применял ее для распознавания изображений, тут же поизучал преобразование самих изображений для улучшения результатов распознавания(ну там сделать черно белым,ну и вы знаете).

Пока я писал небольшой проектик с очередным перцептроном на Spring, для доступа по Rest к беку с бд для хранения примеров и весов, как метеорит в медиа пространство ворвалась информация сначала о StableDifusion, или готовая StableDifusionPortable , а чуть позже и ChatGPT от OpenAI. Первым делом я конечно же сгенерировал локально несколько многоголовых и многопальцевых гуманойдов на фоне Cyberpunk сити, и принялся погружаться в ролевые рассказы о Warhammer 40000 в ChatGPT. Но как только мои всё возрастающие интересы разбились об ограничения данных решений, я познакомился с урезанными клонами в Telegram, и уже начал было мечтать о оцифровке своего сознания(ну или хотя бы его иллюзии) с целью получить таки наконец-то своего клона Джарвиса (ии железного человека, а вдруг не знаете), до этого уже были подобраны инструменты с Text to speech и назад функциями, и убраны на полочки гитхаба, так же доступны по ссылкам.

Пока вы еще не кинулись себе инсталлировать всякие там Pythorch и Tensor с Cuda а так-же pip, и не потонули в том что оказывается разные релизы разных библиотек нейронного обучения зависят, и или совместимы с различными комбинациями версий этих библиотек и их компонентов, сразу прошу, придержите коней, остудите пыл и почитайте про .env в python, это позволит вам не возвращаться по десять раз к локальной переустановке, предыдущих установленных сетей. Так-же как мне стало ясно дальше в целом безопасность пк начнет то там то тут испускать пар во все стороны, потому что вовлекшись в этот увлекательный процесс вы рискуете как и я начать тащить себе готовые библиотеки и решения чтобы их скорее поизучать

Среды и окружение

Я долго шел к этому и оно назрело, в той же llama.cpp я не сразу заметил пункты про docker да и не мудрено, почитав про llama.cpp я увидел упоминания переноса вычислений на GPU от чего сразу решил что вероятно это тогда точно сугубо локальное решение, и ни о какой alpaca конфетке под RaspberyPI (например) речи не может идти. Каким же было мое удивление, когда я наткнулся на это и тут все стало ясно, docker - наше все, никакие .env не нужны, image можно хранить и делать с ним все аля cd/cd-R диск из прошлого, далее было вникание как развернуть то или иное решение в docker, об этом так-же далее в статьях при интересе читателя.

Alpaca, Llama, coboldcpp и прочие звери

Скорость мирового прогресса все ускоряется несмотря на окончание прогресса развития уменьшения транзисторов для чипов процессоров, и уже думаю где-то на пол пути ко скорости света, ровно с таким ощущением, воспринимаются появляющиеся кучи продуктов с крутыми фичами.

В продуктиве я больше работаю на java (но и к c# с с++ и python норм отношусь, но то в какую лепешку наступаешь при вхождении в it первой прилипает как-то по особенному)) ) так что стали интересны решения в интернете для реализации своей системы запоминания) именно на этих или около с минималкой языках, нашел некоторые примеры, правда там доступ ведется в консоль, такое решил не копировать, сам своих велосипедов настряпать могу.

Появился интерес к автономным решениям в этих областях, тут конечно же всплыли alpaca, llama.cpp (coboldcpp и другие обложки) ,обязательно не забудьте про Vicuna - полномасштабно с описанием сражений без нее Warhammer 40000 вам не ощутить.

В процессе изучения стало понятно что ChatGPT хранит историю запросов ответов, не очень заботясь о том знает ли об этом пользователь, но опять-же как я понял данная память ограничена глубиной = количеству токенов, опять же эту глубину можно победить(освободить) переобучением модели, если не ошибаюсь, и как с этим справился наш герой, все на просмотр картины второй... Возобладало желание реализовать данную функциональность например через хранение в БД. Об этом если интерес у читателя не пропадет и будут положительные комментарии напишу в следующих статьях. Дальше поэтапно рекомендации к погружению в эти инструменты:

Для входа в тему и ознакомления с alpaca, рекомендую:

Тут отличная статья про настройку

Тут статься про установку на свой сервер, но все же мне зашло только после просмотра нескольких роликов на youtobe

Наверно у всех java developer-ов, одним из первых поисковых запросов при знакомстве стал поиск java решений для работы с openApi и chatGPT3, что не проблема(ниже один из и тому подобных примеров, опять же много на youtobe):

Ответ чата на вопрос как к нему подключиться (OpenApi из java)

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

в итоге только за невозможностью оплатить доступ к официальным инструментам и последующей блокировке доступа к официальным инструментам для модификации моделей:

Переносим свою картину мира в чат бота

однако без необходимости внесения денег это все еще возможно, дообучение с переходом на другой язык(один из примеров):

Вот еще несколько интересных ссылок:

UI для LLama.cpp coboldcpp

 Alpaca rest на python, тут интересно и ближе всего к цели

Еще один кандидат KoboldAI, качаем релиз, запускаем exe-шник, и указываем ранее загруженную модель, он так же заботливо сообщит если та устарела. Как запустится, после сообщения (так было у меня) жмем Enter и переходим:

browser: http://localhost:5001/#

swagger: http://localhost:5001/api/latest/docs/

ну а с rest вы знаете что делать).

TelegramChatGPT3

llama.cpp тут можно скачать готовый release и по инструкциям вот из классной статьи запускать. Но так как я рассматривал ее в связке с доступом из java, и в конце статьи предлагал использовать docker то предлагаю попробовать запустить ее в контейнере, попутно настроим систему и под другие сети в будущих контейнерах.

Запуск LLAMA.cpp в docker в Windows10

Примечательно что до того как мы будем выполнять какие либо действия с dockerfile, понадобится проделать множество всяких настроек окружения.

Проект который возьмем за основу с гитхаба.

п.с. пока выполнял настройки у себя, все описывал в Readme тут:

README.md если что пропустил в статье там точно есть.

Первым делом устанавливаем Docker.

далее то с чем я сталкивался:
  1. проверить установлены ли все последние обновления системы(так же в некоторых случаях потребуется подписаться на ветку дев и докачать обновления)

  2. у меня видеокарта GeForce 1070, и я использую GeForce experience для поддержки актуальности дров, необходимо убедиться что стоит последний

  3. как советуют сами Nvidia тут рядом нужно поставить CUDA ссылку они там предоставляют

  4. необходимо запустить docker и проверить что все норм. Попутно можно выполнить проверку корректности установки командой:

    docker run -it --rm --gpus all ubuntu nvidia-sm

    или по инструкции отсюда(ссылку любезно указал автор в readme проекта):

  5. в проекте открываем readme:

    видим что порядок команд там под линукс заточен, и размещен по bash скриптам, спасибо создателю, но нам это не нужно, выковыриваем команды из bash скриптов:

    docker build -t llama-cpp-container .

    docker run -dit --name llama-cpp-container -p 221:22 --gpus all --shm-size="12gb" --restart unless-stopped llama-cpp-container:l
    atest

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

    далее контейнер запущен.

  6. Но в нем нет модели ggml так как строки подгрузки ее с сайта закомментированы в dockerfile. я добавил в корневую папку рядом с dockerfile папку model и скопировал туда ранее скачанную модель ссылки с на модели с которым экспериментировал:

    vicuna

    alpaca

    качаем .bin, с другими по аналогии.

    Не забываем что есть конвертер моделей из одной в другую.

  7. далее в dockerfile я добавил в строку 64 инструкцию для копирования в образ модели COPY ./model/ggml-vicuna-13b-4bit.bin /llama

  8. снова выполняем build и run, потом по инструкции от автора когда видим в Docker UI что контейнер запущен, выполняем подключение:

    docker container attach llama-cpp-container

  9. далее запускаем командой:

    ./main -i --interactive-first -r "### Human:" --temp 0 -c 2048 -n -1 --ignore-eos --repeat_penalty 1.2 --instruct -m

В моем случае нужен апгрейд памяти железа вся оперативка помимо смысловой нагрузки альпаки съедается еще и докером.

Другие сети запускаются схожим образом, не хотел раздувать статью так как указал что она "простая".

Мысли бонусом от меня:

  1. наборы вопросов и ответов для персонализации или конкретизации модели в процессе переобучения, можно получить опять же от с превеликим удовольствием предоставившего ChatGPT.

  1. на вопрос, к ChatGPT а ты можешь выступить в роли функции для оценки эффективности результатов принятого решения другой нейронной сети(возможно моих любимых перцептронов) для коррекции ее подборки правильных ответов(обучение без учителя), чат ответил: да я могу выступить в этой роли однако следует понимать что я не являюсь экспертом в этой области. Мои мысли тут: оператор(как в матрице), загрузить программу обучения для оценки эффективности.

  1. Последним backend решением будет то которое предоставит чатам на подобие alpaca доступ к файловой системе машины, и которой станет возможно управлять посредством текстового общения(ну или text to speech), поприветствуйте новую операционную систему.

Интересные инструменты для реализации UI для такого чата:

Бонусом ссылка на докер файл как пример для основы, контейнера с бесплатным генератором музыки Audiocraft.

Конец статьи

Большая часть из описанных мной решений или какая либо информация скорее всего присутствует в моем репозитории, или на моем сайте портфолио.

Процитировать не смогу, но своими словами, где-то услышал выражение(или что-то похожее):

Если у меня есть яблоко и я дам его тебе, то яблоко будет у тебя а у меня нет. Но если у меня есть идея и я дам тебе эту идею, то у нас у обоих будет по идее. Так что рад поделиться, и еще больше рад если вы свою полученную идею не выбросите в урну.

Позже чтобы не раздувать статью,напишу другую про коннект из java.

Спасибо, и всем хорошего дня.

Трек, под который не страшно погружаться во все это

кстати можно статью читать так-же под этот трек.

Ну и мой любимый анекдот: одна голова хорошо, а две урод.

Комментарии (4)


  1. raamid
    21.06.2023 13:29

    Тема "войти в AI" актуальная, спасибо за подборку. Как раз недавно ковырял инструкцию

    https://levelup.gitconnected.com/privategpt-an-open-source-offline-chatbot-for-your-documents-fb7ed1a2db87

    Удалось запаковать все в Docker но не с первого раза. Оказывается там нужен Python 3.10, а по умолчанию ставится 3.8 отчего скрипт не работает.


    1. j0schi Автор
      21.06.2023 13:29

      Спасибо за позитивный комментарий, добавил описание того как я разворачивал.


  1. 18741878
    21.06.2023 13:29

    Вы не точно цитируете Бернарда Шоу: если у вас есть яблоко и у меня есть яблоко и мы ими обмениваемся, то у каждого из нас остается по одному яблоку; но если у вас есть идея и у меня есть идея и мы обмениваемся ими, то у каждого у нас уже по две идеи (приблизительный перевод отсюда https://www.goodreads.com/quotes/23088-if-you-have-an-apple-and-i-have-an-apple)


    1. j0schi Автор
      21.06.2023 13:29
      -1

      Отлично, оригинал еще лучше чем мне помнилось)