Интеграция нейросетей в ZennoPoster: от локального развертывания до внешнего API.

Serj566

Client
Регистрация
09.05.2016
Сообщения
95
Благодарностей
192
Баллы
33
header_ZP_API.png

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

Материал будет разбит на несколько ключевых разделов:
  1. Запуск Ollama на Windows: простая установка и отправка запроса через API.
  2. Регистрация на DeepInfra: получение API-ключа с тестовым балансом 1,8$ и отправка запроса через API.
  3. Общие сведения о работе с нейросетями: полезные рекомендации и информация.

Инструкция по запуску Ollama на Windows с помощью простой установки и отправке запроса через API

Эта инструкция предполагает использование самой простой установки Ollama через установщик для Windows.

1. Скачивание и установка Ollama:
  • Перейдите на страницу Ollama: https://ollama.com/download
    Снимок экрана 2024-12-05 в 18.37.56.png

  • Скачайте и запустите установщик. Следуйте инструкциям на экране. По умолчанию Ollama установится в %LOCALAPPDATA%\ollama.
    Снимок экрана 2024-12-05 в 18.35.06.png

    Снимок экрана 2024-12-05 в 18.35.33.png

  • После установки Ollama запустится автоматически и будет доступна в системном трее.
    Снимок экрана 2024-12-05 в 19.32.35.png

  • Проверяем работоспособность Ollama. Откройте интерфейс Ollama в браузере по адресу http://localhost:11434, вы должны увидеть сообщение Ollama is running, если вы его видите значит всё хорошо и Ollama работает.
2. Загрузка модели:
  • Перейдите на станицу с моделями и выберите интересующую вас модель: https://ollama.com/models
    Снимок экрана 2024-12-05 в 18.39.04.png

  • В разделе "Models" нажмите на название интересующей вас модели и скопируйте имя нужной модели.
    Снимок экрана 2024-12-05 в 18.41.31.png

    Важно! Обратите внимание на размер модели, которую вы планируете использовать. Он не должен превышать объём видеопамяти вашей видеокарты. В противном случае модель либо не запустится вовсе, либо будет работать очень медленно, поскольку часть её будет выгружена в оперативную память.

    Снимок экрана 2024-12-05 в 18.42.23.png


    Чтобы запустить, например, Llama3.2-vision:90b, нам потребуется не менее 55 гигабайт видеопамяти. Если у вас в компьютере только две видеокарты RTX4090, то вы не сможете комфортно использовать данную модель. В таком случае вам потребуется как минимум Nvidia TESLA H100 80G. Однако использование этой видеокарты на обычном ПК не имеет смысла, к тому же её стоимость составляет почти 4,5 миллиона рублей, что не каждому по карману.

  • Выберите модель, которую хотите использовать, например, gemma:2b. Обратите внимание, что загрузка модели может занять значительное время в зависимости от размера модели и скорости вашего интернет-соединения.
    • Загрузите модель:
      • После установки Ollama, вы можете загрузить модель. Например, загружаем модель gemma:2b.
        Для этого нам необходимо выполнить следующую команду в командной строке (CMD).
        Bash:
        ollama pull gemma:2b
    • Запустите модель:
      • Чтобы запустить модель в командной строке, нам нужно ввести следующую команду:
        Bash:
        ollama run gemma:2b
        Однако мы не будем этого делать, так как нам достаточно просто загрузить модель с помощью предыдущей команды для последующего использования через API.
Вы можете использовать Ollama не только через API, но и для других задач, например, для тестирования моделей. Для этого существует удобное расширение для браузера, которое можно скачать по следующей ссылке: https://github.com/n4ze3m/page-assist

Снимок экрана 2024-12-05 в 18.45.49.png


Кроме того, в этом расширении у вас есть возможность управлять моделями, если это необходимо.

Снимок экрана 2024-12-05 в 18.45.18.png


3. Отправка запроса через API:

Для того чтобы отправить запрос к API Ollama, нам необходимо осуществить экранирование System Prompt и Prompt, сформировать POST-запрос к адресу API Ollama по адресу http://127.0.0.1:11434/api/chat, отправить запрос и произвести разбор JSON-ответа.

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

Снимок экрана 2024-12-05 в 20.30.14.png


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

Разберем более подробно структуру запроса к API.
Данный запрос представляет собой JSON-объект, который используется для взаимодействия с API нейросети с использованием языковой модели. Давайте подробно разберем каждую часть этого запроса:

JSON:
{
  "model": "{-Variable.Model-}",
  "temperature": {-Variable.Temperature-},
  "messages": [
    {"role": "system", "content": {-Variable.System_Prompt-}},
    {"role": "user", "content": {-Variable.Prompt-}}
  ],
  "stream": false
}
Поля запроса
  1. model: Это строка, указывающая, какую модель нейросети вы хотите использовать для генерации текстов. Например, это может быть "gemma2:2b" или "llama". В данном случае используется переменная { -Variable.Model- }, что означает, что конкретное значение будет подставлено в момент выполнения запроса.

  2. temperature: Это числовое значение, которое определяет уровень случайности генерации текста. Чем выше значение (например, 1.0), тем более разнообразным и креативным будет ответ, но также и менее предсказуемым. Низкие значения (например, 0.2) делают ответы более консервативными и предсказуемыми. Здесь также используется переменная { -Variable.Temperature- }.

  3. messages: Это массив сообщений, который включает роли и содержание общения. Он предназначен для создания контекста для модели, чтобы она могла адаптировать свои ответы в зависимости от предыдущих обменов.
    Каждое сообщение – это объект с двумя полями:
    • role: Указывает на роль отправителя сообщения. Возможные значения:
      • "system": Используется для установки системных инструкций или контекста, которые помогут модели понимать, как следует отвечать.
      • "user": Это сообщение от пользователя, на которое модель должна ответить.
    • content: Это строка, которая содержит текст сообщения. В данном случае используется переменная { -Variable.System_Prompt- } для системного сообщения и { -Variable.Prompt- } для пользовательского сообщения.
  4. stream: Это логическое значение (true/false), которое указывает, хотите ли вы получать ответ по частям (стриминг) или в одном целостном сообщении. В данном случае оно установлено в false, что означает, что ответ будет получен сразу, а не по частям.
Данный запрос к API нейросети формирует структуру, позволяющую получить ответ, основываясь на заданной модели, уровне случайности, контексте общения и настройках вывода. Он позволяет гибко конфигурировать запрос в зависимости от поставленных целей (например, креативный текст против строго информативного).

Регистрация на DeepInfra и получение API-ключа

1. Проходим регистрацию:
  • Перейдите на официальный сайт DeepInfra https://deepinfra.com/login# и нажмите на кнопку "Create one".
  • Заполните все необходимые поля для создания учетной записи, включая email и пароль.
Снимок экрана 2024-12-05 в 19.25.21.png


  • Теперь нам нужно проверить, что начислены 1.8$, для этого после авторизации переходим по адресу https://deepinfra.com/dash/billing или просто заходим в раздел «Billing».
Снимок экрана 2024-12-05 в 21.03.20.png


Если у вас так же, то всё хорошо! Можем получать API-ключ.

2. Получение API ключа:
  • Найдите раздел API Keys (API ключи) или просто перейдите по ссылке: https://deepinfra.com/dash/api_keys
  • Мы можем скопировать уже готовый ключ или нажмите на кнопку "Создать API ключ" или аналогичную, чтобы сгенерировать новый API ключ.
  • Копируем ключ и мы можем использовать его в своем проекте для отправки запросов к API DeepInfra.
Снимок экрана 2024-12-05 в 21.09.13.png


3. Отправка запроса через API:

Чтобы успешно отправить запрос к API DeepInfra, нам потребуется немного изменить тот POST-запрос, который мы использовали для отправки запроса к Ollama.
  1. Измените адрес API:
    Замените старый адрес API http://127.0.0.1:11434/api/chat на новый адрес:

    Код:
    https://api.deepinfra.com/v1/openai/chat/completions
  2. Добавьте заголовок авторизации:
    В вашем запросе необходимо указать заголовок для авторизации. Замените {-Variable.Deepinfra_API_Key-} на ваш реальный API-ключ DeepInfra:

    Код:
    Authorization: Bearer {-Variable.Deepinfra_API_Key-}
  3. Обновите модель:
    Не забудьте изменить название используемой модели. Например, замените её на:

    Код:
    meta-llama/Meta-Llama-3.1-8B-Instruct
Снимок экрана 2024-12-05 в 21.23.03.png


После того как мы отправили запрос к API DeepInfra, мы получим ответ и выведем его в лог. Его также можно использовать дальше в проекте, но это уже на ваше усмотрение.

Снимок экрана 2024-12-05 в 22.18.56.png


В конце статьи вы можете скачать шаблон с примерами, которые были рассмотрены в данной статье. Не забудьте указать API-ключ от DeepInfra и необходимую модель для отправки запроса. Модель следует указать как для DeepInfra, так и для Ollama. В зависимости от того, через что вы отправляете запрос.

Список доступных моделей для DeepInfra вы можете посмотреть на странице: https://deepinfra.com/models/text-generation/

Общие сведения о работе с нейросетями

Работа с нейросетями может осуществляться различными способами, включая использование платформ, таких как Ollama, и через API. Ниже приведены плюсы и минусы каждого из этих подходов.

Работа с нейросетями через Ollama

Плюсы:
  1. Упрощённый доступ: Ollama предоставляет удобный интерфейс для работы с нейросетями, что облегчает процесс разработки.
  2. Локальное выполнение: Возможность запускать модели локально может снизить задержку и повысить безопасность данных, так как они не отправляются на удалённые серверы.
Минусы:
  1. Высокие требования к оборудованию: Для работы с Ollama нужны дорогие и мощные видеокарты, что делает его менее доступным для пользователей с ограниченным бюджетом.
  2. Квантованные модели: Через Ollama можно в основном запускать только квантованные модели, что ограничивает выбор доступных для использования нейросетей.
  3. Ограничение на количество запросов: Ollama позволяет выполнять только один запрос одновременно, что может стать узким местом при работе с многопоточными проектами.
  4. Сложность установки: Необходимость установки и настройки программного обеспечения может стать преградой для пользователей без технического опыта.
Работа с нейросетями через API

Плюсы:
  1. Простота интеграции: API обычно предоставляет хорошо документированные интерфейсы, что облегчает интеграцию в существующие приложения.
  2. Масштабируемость: Легко адаптироваться к изменяющимся требованиям, так как вычислительные ресурсы управляются сторонним провайдером.
  3. Доступ к последним разработкам: Использование API позволяет получать доступ к самым последним моделям и обновлениям без необходимости самостоятельно обновлять ПО.
  4. Снижение нагрузки на локальную машину: Всё происходит на удаленных серверах, что снижает требования к локальному оборудованию.
Минусы:
  1. Зависимость от интернет-соединения: Нужно стабильное интернет-соединение для работы с API, что может быть ограничивающим фактором.
  2. Стоимость: Некоторые API могут быть платными, особенно при высоких объёмах запросов, что может увеличить расходы.
  3. Конфиденциальность: Отправка данных на удалённые серверы может вызывать опасения по поводу конфиденциальности и безопасности.
  4. Ограничения по количеству запросов: Многие API имеют ограничения на количество запросов, что может ограничить использование в больших проектах.

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

Минусы квантованных моделей по сравнению с FP16, BF16 и BF8

Квантованные модели, хотя и полезны для уменьшения объёма памяти и увеличения скорости, имеют некоторые недостатки по сравнению с моделями формата FP16, BF16 и BF8:
  1. Потеря точности: Квантованные модели часто страдают от значительной потери точности по сравнению с моделями с плавающей запятой, такими как FP16 и BF16. Из-за ограничения количества бит для представления весов и активаций, квантованные модели могут не точно воспроизводить значения, что приводит к ухудшению качества результатов.

  2. Сложности с численной стабильностью: При использовании квантованных моделей может возникнуть проблема с численной стабильностью, особенно при выполнении операций сложения и умножения. Модели FP16 и BF16 обеспечивают более широкий диапазон значений, что снижает риски связанных с переполнением и потерей информации.

  3. Ограниченный диапазон значений: Диапазон значений у квантованных моделей часто значительно меньше по сравнению с FP16, BF16 и BF8. Это может ограничить их применение в задачах, требующих высокой точности и вариативности значений.

  4. Необходимость в обучении под квантование: Квантованные модели могут требовать дополнительных этапов дообучения для восстановления потерянной точности, что увеличивает время и ресурсы на обучение.

  5. Нежелательные артефакты: Квантование может приводить к появлению нежелательных артефактов в результатах работы модели, особенно в сложных задачах, таких как обработка изображений и секвенирование текста.

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

Существует несколько типов квантования, используемых в машинном обучении:

  1. Q8: Модели, квантующие веса и активации до 8 бит. Обеспечивают хорошее качество при эффективном использовании ресурсов. Это один из самых распространённых типов квантования.

  2. Q6_K: Модели с квантованием до 6 бит. Обладают более высоким качеством по сравнению с 4-битными моделями, при этом обеспечивают умеренную скорость генерации. Подходят для задач, где важно сбалансировать качество и скорость.

  3. Q5_K_S/M: Модели с квантованием до 5 бит с дополнительными настройками точности. Они предлагают лучшее качество по сравнению с Q4 и Q3, при этом минимально снижают скорость генерации. Используются для более требовательных задач, где важен баланс между качеством и производительностью.

  4. Q4: Модели с квантованием до 4 бит. Обладают меньшими ресурсными требованиями, что делает их идеальными для систем с ограниченной видеопамятью. Однако возможна потеря качества из-за снижения точности.

  5. Q3_K_S/M/L: Модели с квантованием до 3 бит с настройками точности (S/M/L). Обеспечивают минимальный размер и высокую скорость генерации. Подходят для систем с очень ограниченными ресурсами, где приоритет отдается скорости, а не качеству.
Что такое FP16, BF16 и BF8
  • FP16 (16-битная плавающая запятая): Это формат представления чисел с плавающей запятой, использующий 16 бит. Весы хранятся в виде 1 бита для знака, 5 бит на экспоненту и 10 бит на мантиссу. Этот формат предлагает хороший баланс между качеством и размером данных. FP16 позволяет представлять широкий диапазон чисел, обеспечивая достаточно высокую точность для многих задач машинного обучения.

  • BF16 (Brain Floating Point 16): Это формат, также использующий 16 бит, однако он отличается от FP16 в распределении битов. BF16 использует 1 бит для знака, 8 бит для экспоненты и 7 бит для мантиссы. Это обеспечивает больший динамический диапазон, хотя и с меньшей точностью мантиссы по сравнению с FP16. BF16 часто используется в нейронных сетях, так как позволяет эффективно обучать модели благодаря большему динамическому диапазону, сохраняя при этом разумные требования к ресурсам. Это делает его особенно подходящим для глубокого обучения, где может потребоваться работа с большими спектрами чисел.

  • BF8 (Brain Floating Point 8 ): Это новый и менее распространённый формат, который использует 8 бит для представления чисел с плавающей запятой. BF8 выделяет 1 бит для знака, 5 бит для экспоненты и 2 бита для мантиссы. Несмотря на свою компактность, BF8 может обеспечивать достаточно хорошую точность в задачах, где требуется высокая скорость обработки и низкие требования к видеопамяти. BF8 становится всё более популярным благодаря своей эффективности в приложениях, таких как обучение и инференс в специализированных аппаратных системах.

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

Ключевые аспекты:
  • Квантованные модели могут быть более экономичными, но часто страдают от сниженной точности и проблем с численной стабильностью.
  • FP16 и BF16 предлагают более широкий диапазон значений и лучшее качество, в то время как BF8 предоставляет дополнительные возможности для оптимизации для компактных моделей.
  • Различные типы квантования (Q8, Q6_K, Q5_K_S/M, Q4, Q3_K_S/M/L) позволяют разработчикам выбирать подходящий баланс между качеством и ресурсами в зависимости от специфических требований их задач.

Работа с текстовыми нейросетями через промты и системные промты

Работа с текстовыми нейросетями через промты и системные промты требует понимания основных принципов формулировки запросов, а также разницы между этими двумя типами промтов. Давайте рассмотрим основные принципы и их отличия.

Основные принципы работы с промтами
  1. Ясность и конкретность: Промт (или запрос) должен быть чётким и конкретным, чтобы нейросеть могла правильно интерпретировать намерения пользователя. Чем яснее и детальнее вопрос, тем более подходящий ответ можно получить.

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

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

  4. Использование примеров: Включение примеров в промт может помочь нейросети лучше понять, какой именно ответ ожидается. Например, вместо общего вопроса «Как написать резюме?» можно задать более конкретный запрос: «Приведи пример резюме для программиста с 5-летним опытом работы».

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

Системные промты — это специальные инструкции, которые задаются нейросети перед началом работы и могут определять её поведение, стиль, тональность или контекст. Они часто используются для управления тем, как модель должна реагировать на пользовательские запросы.

Примеры системных промтов:
  • «You are a marketing expert who writes only high-quality and proven marketing schemes. You try to fully understand the issue and find the best solution.»
    Вы маркетолог, который пишет только качественные и проверенные маркетинговые схемы. Вы пытаетесь полностью разобраться в вопросе и найти лучшее решение.

  • «You are a sci-fi story writing assistant who is deeply immersed in the sci-fi genre.»
    Вы — помощник писателя в написании научно-фантастических рассказов, глубоко погруженный в жанр научной фантастики.
Отличия между промтами и системными промтами
  1. Цель: Промты предназначены для получения конкретных ответов на вопросы или задачи, тогда как системные промты определяют более широкие параметры взаимодействия (тематический и стилистический контекст).

  2. Структура: Промты могут быть более короткими и сфокусированными на конкретном вопросе, в то время как системные промты часто содержат инструкции и контекст, что позволяет управлять качеством видов получаемых ответов.

  3. Долговечность: Системные промты могут определять поведение модели на протяжении всей сессии взаимодействия, тогда как обычные промты используются для каждой отдельной задачи.
Почему системные промты лучше всего писать на английском
  1. Лингвистические особенности: Модели, разработанные на основе больших датасетов, часто обучаются на английском языке, который служил основным языком в научных и технических публикациях. Это может привести к лучшему пониманию запросов и более высоким качеству ответов на английском.

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

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

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

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

Заключение

В этой статье я попытался изложить основы, которые необходимо знать и понимать для начала работы с нейросетями.

От установки Ollama и регистрации в DeepInfra до отправки запросов через ZP — всё это включено в статью. Также я рассмотрел основы квантованных моделей, их виды и влияние на работу. Кроме того, я затронул аспекты написания промта и системного промта.

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

Если эта статья вызовет интерес у читателей, в следующем конкурсе мы обсудим более сложные и менее базовые аспекты работы с нейросетями. Однако это будет возможно только при наличии интереса со стороны аудитории.
 

Вложения

Последнее редактирование:
Регистрация
26.05.2020
Сообщения
514
Благодарностей
173
Баллы
43
На заключении спалился, что текст сгенерирован той самой нейросетью )))
Подача сумбурная и непоследовательно, как будто разделы (абзацы) местами перепутаны.
 

Serj566

Client
Регистрация
09.05.2016
Сообщения
95
Благодарностей
192
Баллы
33
На заключении спалился, что текст сгенерирован той самой нейросетью )))
Подача сумбурная и непоследовательно, как будто разделы (абзацы) местами перепутаны.
Ну на самом деле нейросетями сгенерированна первая половина статьи, и картимнка ими сгенерированна, а вот Общие сведения о работе с нейросетями, почти полностью написанны мною, только орфографию поправил нейронками.

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

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)