- Регистрация
- 09.05.2016
- Сообщения
- 88
- Благодарностей
- 188
- Баллы
- 33
Эта статья предназначена для тех, кто только начинает задумываться о применении нейросетей в своих проектах ZennoPoster, но пока не успел или не хочет тратить время на детальное изучение всех возможностей их интеграции.
Материал будет разбит на несколько ключевых разделов:
- Запуск Ollama на Windows: простая установка и отправка запроса через API.
- Регистрация на DeepInfra: получение API-ключа с тестовым балансом 1,8$ и отправка запроса через API.
- Общие сведения о работе с нейросетями: полезные рекомендации и информация.
Инструкция по запуску Ollama на Windows с помощью простой установки и отправке запроса через API
Эта инструкция предполагает использование самой простой установки Ollama через установщик для Windows.
1. Скачивание и установка Ollama:
- Перейдите на страницу Ollama: https://ollama.com/download
- Скачайте и запустите установщик. Следуйте инструкциям на экране. По умолчанию Ollama установится в %LOCALAPPDATA%\ollama.
- После установки Ollama запустится автоматически и будет доступна в системном трее.
- Проверяем работоспособность Ollama. Откройте интерфейс Ollama в браузере по адресу http://localhost:11434, вы должны увидеть сообщение Ollama is running, если вы его видите значит всё хорошо и Ollama работает.
- Перейдите на станицу с моделями и выберите интересующую вас модель: https://ollama.com/models
- В разделе "Models" нажмите на название интересующей вас модели и скопируйте имя нужной модели.
Важно! Обратите внимание на размер модели, которую вы планируете использовать. Он не должен превышать объём видеопамяти вашей видеокарты. В противном случае модель либо не запустится вовсе, либо будет работать очень медленно, поскольку часть её будет выгружена в оперативную память.
Чтобы запустить, например, Llama3.2-vision:90b, нам потребуется не менее 55 гигабайт видеопамяти. Если у вас в компьютере только две видеокарты RTX4090, то вы не сможете комфортно использовать данную модель. В таком случае вам потребуется как минимум Nvidia TESLA H100 80G. Однако использование этой видеокарты на обычном ПК не имеет смысла, к тому же её стоимость составляет почти 4,5 миллиона рублей, что не каждому по карману.
- Выберите модель, которую хотите использовать, например, gemma:2b. Обратите внимание, что загрузка модели может занять значительное время в зависимости от размера модели и скорости вашего интернет-соединения.
- Загрузите модель:
- После установки Ollama, вы можете загрузить модель. Например, загружаем модель gemma:2b.
Для этого нам необходимо выполнить следующую команду в командной строке (CMD).
Bash:ollama pull gemma:2b
- После установки Ollama, вы можете загрузить модель. Например, загружаем модель gemma:2b.
- Запустите модель:
- Чтобы запустить модель в командной строке, нам нужно ввести следующую команду:
Bash:ollama run gemma:2b
- Чтобы запустить модель в командной строке, нам нужно ввести следующую команду:
- Загрузите модель:
Кроме того, в этом расширении у вас есть возможность управлять моделями, если это необходимо.
3. Отправка запроса через API:
Для того чтобы отправить запрос к API Ollama, нам необходимо осуществить экранирование System Prompt и Prompt, сформировать POST-запрос к адресу API Ollama по адресу http://127.0.0.1:11434/api/chat, отправить запрос и произвести разбор JSON-ответа.
Аналогичный принцип работы применяется и в отношении других API, с чем вы сможете ознакомиться далее.
Вот и всё, что нам нужно для работы с 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
}
- model: Это строка, указывающая, какую модель нейросети вы хотите использовать для генерации текстов. Например, это может быть "gemma2:2b" или "llama". В данном случае используется переменная { -Variable.Model- }, что означает, что конкретное значение будет подставлено в момент выполнения запроса.
- temperature: Это числовое значение, которое определяет уровень случайности генерации текста. Чем выше значение (например, 1.0), тем более разнообразным и креативным будет ответ, но также и менее предсказуемым. Низкие значения (например, 0.2) делают ответы более консервативными и предсказуемыми. Здесь также используется переменная { -Variable.Temperature- }.
- messages: Это массив сообщений, который включает роли и содержание общения. Он предназначен для создания контекста для модели, чтобы она могла адаптировать свои ответы в зависимости от предыдущих обменов.
Каждое сообщение – это объект с двумя полями:- role: Указывает на роль отправителя сообщения. Возможные значения:
- "system": Используется для установки системных инструкций или контекста, которые помогут модели понимать, как следует отвечать.
- "user": Это сообщение от пользователя, на которое модель должна ответить.
- content: Это строка, которая содержит текст сообщения. В данном случае используется переменная { -Variable.System_Prompt- } для системного сообщения и { -Variable.Prompt- } для пользовательского сообщения.
- role: Указывает на роль отправителя сообщения. Возможные значения:
- stream: Это логическое значение (true/false), которое указывает, хотите ли вы получать ответ по частям (стриминг) или в одном целостном сообщении. В данном случае оно установлено в false, что означает, что ответ будет получен сразу, а не по частям.
Регистрация на DeepInfra и получение API-ключа
1. Проходим регистрацию:
- Перейдите на официальный сайт DeepInfra https://deepinfra.com/login# и нажмите на кнопку "Create one".
- Заполните все необходимые поля для создания учетной записи, включая email и пароль.
- Теперь нам нужно проверить, что начислены 1.8$, для этого после авторизации переходим по адресу https://deepinfra.com/dash/billing или просто заходим в раздел «Billing».
Если у вас так же, то всё хорошо! Можем получать API-ключ.
2. Получение API ключа:
- Найдите раздел API Keys (API ключи) или просто перейдите по ссылке: https://deepinfra.com/dash/api_keys
- Мы можем скопировать уже готовый ключ или нажмите на кнопку "Создать API ключ" или аналогичную, чтобы сгенерировать новый API ключ.
- Копируем ключ и мы можем использовать его в своем проекте для отправки запросов к API DeepInfra.
3. Отправка запроса через API:
Чтобы успешно отправить запрос к API DeepInfra, нам потребуется немного изменить тот POST-запрос, который мы использовали для отправки запроса к Ollama.
- Измените адрес API:
Замените старый адрес API http://127.0.0.1:11434/api/chat на новый адрес:
Код:https://api.deepinfra.com/v1/openai/chat/completions
- Добавьте заголовок авторизации:
В вашем запросе необходимо указать заголовок для авторизации. Замените {-Variable.Deepinfra_API_Key-} на ваш реальный API-ключ DeepInfra:
Код:Authorization: Bearer {-Variable.Deepinfra_API_Key-}
- Обновите модель:
Не забудьте изменить название используемой модели. Например, замените её на:
Код:meta-llama/Meta-Llama-3.1-8B-Instruct
После того как мы отправили запрос к API DeepInfra, мы получим ответ и выведем его в лог. Его также можно использовать дальше в проекте, но это уже на ваше усмотрение.
В конце статьи вы можете скачать шаблон с примерами, которые были рассмотрены в данной статье. Не забудьте указать API-ключ от DeepInfra и необходимую модель для отправки запроса. Модель следует указать как для DeepInfra, так и для Ollama. В зависимости от того, через что вы отправляете запрос.
Список доступных моделей для DeepInfra вы можете посмотреть на странице: https://deepinfra.com/models/text-generation/
Общие сведения о работе с нейросетями
Работа с нейросетями может осуществляться различными способами, включая использование платформ, таких как Ollama, и через API. Ниже приведены плюсы и минусы каждого из этих подходов.
Работа с нейросетями через Ollama
Плюсы:
- Упрощённый доступ: Ollama предоставляет удобный интерфейс для работы с нейросетями, что облегчает процесс разработки.
- Локальное выполнение: Возможность запускать модели локально может снизить задержку и повысить безопасность данных, так как они не отправляются на удалённые серверы.
- Высокие требования к оборудованию: Для работы с Ollama нужны дорогие и мощные видеокарты, что делает его менее доступным для пользователей с ограниченным бюджетом.
- Квантованные модели: Через Ollama можно в основном запускать только квантованные модели, что ограничивает выбор доступных для использования нейросетей.
- Ограничение на количество запросов: Ollama позволяет выполнять только один запрос одновременно, что может стать узким местом при работе с многопоточными проектами.
- Сложность установки: Необходимость установки и настройки программного обеспечения может стать преградой для пользователей без технического опыта.
Плюсы:
- Простота интеграции: API обычно предоставляет хорошо документированные интерфейсы, что облегчает интеграцию в существующие приложения.
- Масштабируемость: Легко адаптироваться к изменяющимся требованиям, так как вычислительные ресурсы управляются сторонним провайдером.
- Доступ к последним разработкам: Использование API позволяет получать доступ к самым последним моделям и обновлениям без необходимости самостоятельно обновлять ПО.
- Снижение нагрузки на локальную машину: Всё происходит на удаленных серверах, что снижает требования к локальному оборудованию.
- Зависимость от интернет-соединения: Нужно стабильное интернет-соединение для работы с API, что может быть ограничивающим фактором.
- Стоимость: Некоторые API могут быть платными, особенно при высоких объёмах запросов, что может увеличить расходы.
- Конфиденциальность: Отправка данных на удалённые серверы может вызывать опасения по поводу конфиденциальности и безопасности.
- Ограничения по количеству запросов: Многие API имеют ограничения на количество запросов, что может ограничить использование в больших проектах.
Выбор между использованием Ollama и API для работы с нейросетями зависит от конкретных задач, требований к производительности, ресурсов и уровня технической подготовки разработчиков. Каждое из решений имеет свои преимущества и недостатки, которые стоит учитывать при принятии решения.
Минусы квантованных моделей по сравнению с FP16, BF16 и BF8
Квантованные модели, хотя и полезны для уменьшения объёма памяти и увеличения скорости, имеют некоторые недостатки по сравнению с моделями формата FP16, BF16 и BF8:
- Потеря точности: Квантованные модели часто страдают от значительной потери точности по сравнению с моделями с плавающей запятой, такими как FP16 и BF16. Из-за ограничения количества бит для представления весов и активаций, квантованные модели могут не точно воспроизводить значения, что приводит к ухудшению качества результатов.
- Сложности с численной стабильностью: При использовании квантованных моделей может возникнуть проблема с численной стабильностью, особенно при выполнении операций сложения и умножения. Модели FP16 и BF16 обеспечивают более широкий диапазон значений, что снижает риски связанных с переполнением и потерей информации.
- Ограниченный диапазон значений: Диапазон значений у квантованных моделей часто значительно меньше по сравнению с FP16, BF16 и BF8. Это может ограничить их применение в задачах, требующих высокой точности и вариативности значений.
- Необходимость в обучении под квантование: Квантованные модели могут требовать дополнительных этапов дообучения для восстановления потерянной точности, что увеличивает время и ресурсы на обучение.
- Нежелательные артефакты: Квантование может приводить к появлению нежелательных артефактов в результатах работы модели, особенно в сложных задачах, таких как обработка изображений и секвенирование текста.
- Ограниченное использование и оптимизация на некоторых задачах: Не все задачи могут быть оптимизированы при использовании квантованных моделей. Например, для задач, требующих высокой предсказательной способности, может быть предпочтительнее использовать модели с плавающей запятой.
Существует несколько типов квантования, используемых в машинном обучении:
- Q8: Модели, квантующие веса и активации до 8 бит. Обеспечивают хорошее качество при эффективном использовании ресурсов. Это один из самых распространённых типов квантования.
- Q6_K: Модели с квантованием до 6 бит. Обладают более высоким качеством по сравнению с 4-битными моделями, при этом обеспечивают умеренную скорость генерации. Подходят для задач, где важно сбалансировать качество и скорость.
- Q5_K_S/M: Модели с квантованием до 5 бит с дополнительными настройками точности. Они предлагают лучшее качество по сравнению с Q4 и Q3, при этом минимально снижают скорость генерации. Используются для более требовательных задач, где важен баланс между качеством и производительностью.
- Q4: Модели с квантованием до 4 бит. Обладают меньшими ресурсными требованиями, что делает их идеальными для систем с ограниченной видеопамятью. Однако возможна потеря качества из-за снижения точности.
- Q3_K_S/M/L: Модели с квантованием до 3 бит с настройками точности (S/M/L). Обеспечивают минимальный размер и высокую скорость генерации. Подходят для систем с очень ограниченными ресурсами, где приоритет отдается скорости, а не качеству.
- 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) позволяют разработчикам выбирать подходящий баланс между качеством и ресурсами в зависимости от специфических требований их задач.
Работа с текстовыми нейросетями через промты и системные промты
Работа с текстовыми нейросетями через промты и системные промты требует понимания основных принципов формулировки запросов, а также разницы между этими двумя типами промтов. Давайте рассмотрим основные принципы и их отличия.
Основные принципы работы с промтами
- Ясность и конкретность: Промт (или запрос) должен быть чётким и конкретным, чтобы нейросеть могла правильно интерпретировать намерения пользователя. Чем яснее и детальнее вопрос, тем более подходящий ответ можно получить.
- Контекстуализация: Важно предоставить нейросети необходимый контекст. Это может включать информацию о теме, стиле, формате ответа и других аспектах. Упоминание контекста помогает модели лучше понять смысл запроса.
- Иерархия информации: Если вопрос сложный, его следует разбить на части или задать последовательные вопросы. Это упрощает обработку информации нейросетью.
- Использование примеров: Включение примеров в промт может помочь нейросети лучше понять, какой именно ответ ожидается. Например, вместо общего вопроса «Как написать резюме?» можно задать более конкретный запрос: «Приведи пример резюме для программиста с 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.»
Вы — помощник писателя в написании научно-фантастических рассказов, глубоко погруженный в жанр научной фантастики.
- Цель: Промты предназначены для получения конкретных ответов на вопросы или задачи, тогда как системные промты определяют более широкие параметры взаимодействия (тематический и стилистический контекст).
- Структура: Промты могут быть более короткими и сфокусированными на конкретном вопросе, в то время как системные промты часто содержат инструкции и контекст, что позволяет управлять качеством видов получаемых ответов.
- Долговечность: Системные промты могут определять поведение модели на протяжении всей сессии взаимодействия, тогда как обычные промты используются для каждой отдельной задачи.
- Лингвистические особенности: Модели, разработанные на основе больших датасетов, часто обучаются на английском языке, который служил основным языком в научных и технических публикациях. Это может привести к лучшему пониманию запросов и более высоким качеству ответов на английском.
- Точное формулирование: Английский язык предлагает богатство выражений и специфику, что позволяет формулировать запросы более точно и лаконично, что важно для системных промтов.
- Поддержка и стандартизация: Многие инструменты и библиотеки машинного обучения, а также сообщества разработчиков акцентируют внимание на англоязычных документациях и примерах, что делает работу более последовательной.
- Избежание двусмысленности: Некоторые языки могут иметь большее количество значений слов или сложные грамматические конструкции, что может привести к недопониманию. Использование английского языка помогает избежать этих проблем, обеспечивая более профессиональный и предсказуемый результат.
Работа с промтами и системными промтами требует понимания как их принципов, так и отличий. Эффективные запросы позволяют улучшить взаимодействие с текстовыми нейросетями, а использование английского языка для системных промтов может повысить качество и стабильность получаемых ответов. Разработка и тестирование промтов — это творческий и аналитический процесс, который требует внимания к деталям, ясности и последовательности.
Заключение
В этой статье я попытался изложить основы, которые необходимо знать и понимать для начала работы с нейросетями.
От установки Ollama и регистрации в DeepInfra до отправки запросов через ZP — всё это включено в статью. Также я рассмотрел основы квантованных моделей, их виды и влияние на работу. Кроме того, я затронул аспекты написания промта и системного промта.
Следует отметить, что эта статья представляет собой лишь краткий обзор базовых основ, и для специалистов в области нейросетей она, вероятно, не будет содержать ничего нового и интересного. Однако она может стать отправной точкой для новичков, желающих внедрить нейросети в свои проекты ZennoPoser.
Если эта статья вызовет интерес у читателей, в следующем конкурсе мы обсудим более сложные и менее базовые аспекты работы с нейросетями. Однако это будет возможно только при наличии интереса со стороны аудитории.
Вложения
-
23,3 КБ Просмотры: 11
Последнее редактирование: