Выводы для PROs

PROs conclusions

Сегодня мы представляем Inference для PRO-пользователей – сообщество, которое предлагает вам доступ к API отобранных конечных точек для некоторых из самых захватывающих моделей, а также улучшенные ограничения на использование бесплатного Inference API. Используйте следующую страницу, чтобы подписаться на PRO.

Пользователи Hugging Face PRO теперь имеют доступ к эксклюзивным API-точкам для отобранного списка мощных моделей, которые используют ультра-быстрый вывод, основанный на генерации текста. Это преимущество в дополнение к бесплатному Inference API, доступному для всех пользователей Hugging Face, чтобы облегчить тестирование и прототипирование на более чем 200 000 моделей. Пользователи PRO наслаждаются более высокими ограничениями на использование этих моделей, а также эксклюзивным доступом к некоторым из лучших моделей, доступных в настоящее время.

Содержание

  • Поддерживаемые модели
  • Начало работы с Inference для PRO
  • Приложения
    • Чат с Llama 2 и Code Llama
    • Заполнение кода с Code Llama
    • Stable Diffusion XL
  • Параметры генерации
    • Управление генерацией текста
    • Управление генерацией изображений
    • Кэширование
    • Потоковая передача данных
  • Подписаться на PRO
  • Часто задаваемые вопросы

Поддерживаемые модели

Помимо тысяч общедоступных моделей, доступных в Hub, PRO-пользователи получают бесплатный доступ к следующим передовым моделям:

Inference для PRO упрощает экспериментирование и прототипирование новых моделей без необходимости развертывания их на собственной инфраструктуре. Он предоставляет пользователям PRO доступ к готовым к использованию HTTP-точкам для всех перечисленных моделей. Это не предназначено для использования в тяжелых производственных приложениях – для этого мы рекомендуем использовать конечные точки Inference. Inference для PRO также позволяет использовать приложения, которые зависят от конечной точки LLM, такие как использование расширения VS Code для автодополнения кода или использование собственной версии Hugging Chat.

Начало работы с Inference для PRO

Использование Inference для PRO очень просто – отправьте POST-запрос к конечной точке API для модели, которую вы хотите запустить. Вам также потребуется аутентификационный токен PRO-аккаунта из страницы настроек вашего токена и используйте его в запросе. Например, чтобы сгенерировать текст, используя Llama 2 70B Chat в сеансе терминала, вам нужно сделать что-то вроде этого:

curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
    -X POST \
    -d '{"inputs": "In a surprising turn of events, "}' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <YOUR_TOKEN>"

Что-то вроде этого будет выведено:

[
  {
    "generated_text": "In a surprising turn of events, 20th Century Fox has released a new trailer for Ridley Scott's Alien"
  }
]

Вы также можете использовать многие знакомые параметры генерации трансформаторов, такие как temperature или max_new_tokens:

curl https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
    -X POST \
    -d '{"inputs": "In a surprising turn of events, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <YOUR_TOKEN>"

[
  {
    "generated_text": "In a surprising turn of events, 2K has announced that it will be releasing a new free-to-play game called NBA 2K23 Arcade Edition. This game will be available on Apple iOS devices and will allow players to compete against each other in quick, 3-on-3 basketball matches.\n\nThe game promises to deliver fast-paced, action-packed gameplay, with players able to choose from a variety of NBA teams and players, including some of the biggest"
  }
]

Для получения дополнительной информации о параметрах генерации, пожалуйста, ознакомьтесь с разделом “Управление генерацией текста” ниже.

Чтобы отправить свои запросы на Python, вы можете воспользоваться InferenceClient, удобной утилитой, доступной в библиотеке Python huggingface_hub:

pip install huggingface_hub

InferenceClient – это полезная оболочка, которая позволяет легко вызывать API и конечные точки вывода:

from huggingface_hub import InferenceClient

client = InferenceClient(model="meta-llama/Llama-2-70b-chat-hf", token=YOUR_TOKEN)

output = client.text_generation("Можете ли вы пожалуйста сообщить нам больше деталей о вашем ")
print(output)

Если вы не хотите передавать токен явно каждый раз при создании клиента, вы можете использовать notebook_login() (в Jupyter notebooks), huggingface-cli login (в терминале) или login(token=YOUR_TOKEN) (в других случаях) для входа один раз. Токен будет автоматически использоваться здесь.

Помимо Python, вы также можете использовать JavaScript для интеграции вызовов вывода в ваши JS или node приложения. Ознакомьтесь с huggingface.js, чтобы начать!

Приложения

Общение с Лламой 2 и Лламой-Кодом

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

Нижеприведенный пример был взят из нашей записи в блоге о Лламе 2, которая подробно описывает, как выполнять запросы к модели для ведения беседы:

prompt = """<s>[INST] <<SYS>>
Вы - полезный, уважительный и честный помощник. Всегда отвечайте максимально полезно, при этом обеспечивая безопасность. Ваши ответы не должны содержать вредного, неэтичного, расистского, сексистского, токсичного, опасного или незаконного контента. Пожалуйста, убедитесь, что ваши ответы являются социально непредвзятыми и положительными по своей природе.

Если вопрос не имеет смысла или не является фактически связанным, объясните, почему вместо того, чтобы давать неверную информацию. Если вы не знаете ответа на вопрос, пожалуйста, не давайте ложную информацию.
<</SYS>>

В моем саду есть лама 😱 Что мне делать? [/INST]
"""

response = client.text_generation(prompt, max_new_tokens=200)
print(response)

Этот пример показывает структуру первого сообщения в многоразовом разговоре. Обратите внимание, как используется разделитель <<SYS>> для указания системного приглашения, которое сообщает модели о том, как мы ожидаем, что она будет себя вести. Затем наш запрос вставляется между разделителями [INST].

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

<s>[INST] <<SYS>>
{{ system_prompt }}
<</SYS>>

{{ user_msg_1 }} [/INST] {{ model_answer_1 }} </s><s>[INST] {{ user_msg_2 }} [/INST]

Тот же самый формат можно использовать с помощью Code Llama Instruct для взаимодействия в технических разговорах с ассистентом, знающим код!

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

Заполнение кода с помощью Code Llama

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

client = InferenceClient(model="codellama/CodeLlama-13b-hf", token=YOUR_TOKEN)

prompt_prefix = 'def remove_non_ascii(s: str) -> str:\n    """ '
prompt_suffix = "\n    return result"

prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"

infilled = client.text_generation(prompt, max_new_tokens=150)
infilled = infilled.rstrip(" <EOT>")
print(f"{prompt_prefix}{infilled}{prompt_suffix}")

def remove_non_ascii(s: str) -> str:
    """ Remove non-ASCII characters from a string.

    Args:
        s (str): The string to remove non-ASCII characters from.

    Returns:
        str: The string with non-ASCII characters removed.
    """
    result = ""
    for c in s:
        if ord(c) < 128:
            result += c
    return result

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

prompt = f"<PRE> {prompt_prefix} <SUF>{prompt_suffix} <MID>"

Для получения более подробной информации о том, как работает эта задача, пожалуйста, посмотрите на https://huggingface.co/blog/codellama#code-completion.

Stable Diffusion XL

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

sdxl = InferenceClient(model="stabilityai/stable-diffusion-xl-base-1.0", token=YOUR_TOKEN)
image = sdxl.text_to_image(
    "Темный готический город в туманную ночь, освещенный уличными фонарями. Мужчина в плаще уходит от нас",
    guidance_scale=9,
)

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

Параметры генерации

Контроль генерации текста

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

  • do_sample: Если установлено значение False (по умолчанию), метод генерации будет жадным поиском, который выбирает наиболее вероятную последовательность продолжения после предоставленного вами промпта. Жадный поиск детерминирован, поэтому при одинаковом вводе всегда будут возвращаться одни и те же результаты. Когда do_sample равен True, токены будут выбираться из вероятностного распределения, и поэтому будут варьироваться в разных вызовах.
  • temperature: Контролирует степень изменчивости, которую мы хотим получить от генерации. Температура 0 эквивалентна жадному поиску. Если мы устанавливаем значение для temperature, то do_sample автоматически включается. То же самое происходит и для top_k и top_p. При выполнении задач, связанных с кодом, мы хотим меньшую изменчивость и, следовательно, рекомендуем низкую температуру. Для других задач, таких как генерация текста без ограничений, рекомендуется более высокая температура.
  • top_k. Включает выборку “Лучших-K”: модель выберет из K наиболее вероятных токенов, которые могут следовать после входной последовательности. Типичные значения находятся в диапазоне от 10 до 50.
  • top_p. Включает выборку “ядра”: модель выберет из такого количества токенов, которое необходимо, чтобы охватить определенную вероятность. Если top_p равно 0.9, то будет рассмотрено 90% наиболее вероятных токенов для выборки, а оставшиеся 10% будут проигнорированы.
  • repetition_penalty: Пытается избежать повторения слов в сгенерированной последовательности.
  • seed: Случайное зерно, которое вы можете использовать в сочетании с выборкой для воспроизводимости.

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

  • max_new_tokens: максимальное количество новых токенов для генерации. По умолчанию оно равно 20, не стесняйтесь увеличивать, если вам нужны более длинные последовательности.
  • return_full_text: включать ли входную последовательность в выход, возвращаемый конечной точкой. Значение по умолчанию, используемое InferenceClient, равно False, но конечная точка сама по умолчанию использует True.
  • stop_sequences: список последовательностей, которые приведут к остановке генерации при их обнаружении в выводе.

Контроль генерации изображений

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

  • negative_prompt: Текст, описывающий контент, от которого вы хотите отклониться модели.
  • guidance_scale: Насколько точно вы хотите, чтобы модель соответствовала промпту. Меньшие числа означают меньшую точность, очень большие числа могут ухудшить качество изображения или создать артефакты.
  • width и height: Желаемые размеры изображения. SDXL лучше всего работает с размерами от 768 до 1024.
  • num_inference_steps: Количество шагов сглаживания для выполнения. Большие числа могут дать лучшее качество, но будут медленнее. Типичные значения находятся в диапазоне от 20 до 50 шагов.

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

Кэширование

Если вы запускаете одну и ту же генерацию несколько раз, вы увидите, что результат, возвращаемый API, остается одинаковым (даже если вы используете выборку вместо жадного декодирования). Это происходит потому, что последние результаты кэшируются. Чтобы каждый раз получать разные ответы, мы можем использовать заголовок HTTP, чтобы сообщить серверу запускать новую генерацию каждый раз: x-use-cache: 0.

Если вы используете InferenceClient, вы можете просто добавить его к свойству клиента headers:

client = InferenceClient(model="meta-llama/Llama-2-70b-chat-hf", token=YOUR_TOKEN)
client.headers["x-use-cache"] = "0"

output = client.text_generation("В неожиданный поворот событий, ", do_sample=True)
print(output)

Потоковая передача

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

Чтобы потоково передавать токены с помощью InferenceClient, просто передайте stream=True и перебирайте ответ.

for token in client.text_generation("Как ты делаешь сыр?", max_new_tokens=12, stream=True):
    print(token)

# Чтобы
# сделать
# сыр,
# вам
# понадобится
# начать
# с
# молока

Чтобы использовать точку доступа generate_stream с помощью curl, вы можете добавить флаг -N/--no-buffer, который отключает буферизацию по умолчанию в curl и показывает данные по мере их поступления с сервера.

curl -N https://api-inference.huggingface.co/models/meta-llama/Llama-2-70b-chat-hf \
    -X POST \
    -d '{"inputs": "В неожиданный поворот событий, ", "parameters": {"temperature": 0.7, "max_new_tokens": 100}}' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <YOUR_TOKEN>"

Подпишитесь на PRO

Вы можете зарегистрироваться сегодня на PRO-подписку здесь. Получите большие лимиты на запросы, настраиваемые ускоренные точки доступа для последних моделей и ранний доступ к функциям. Если у вас есть интересные проекты с использованием Inference API или вы ищете модель, недоступную в Inference для PRO, пожалуйста, используйте эту дискуссию. Пользователи корпоративного уровня также получают преимущества от PRO Inference API в дополнение к другим функциям, таким как SSO.

Часто задаваемые вопросы

Влияет ли это на бесплатный Inference API?

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

Влияет ли это на корпоративных пользователей?

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

Могу ли я использовать свои собственные модели с PRO Inference API?

Бесплатный Inference API уже поддерживает широкий спектр небольших и VoAGI моделей из различных библиотек (таких как diffusers, transformers и sentence transformers). Если у вас есть собственная модель или собственная логика вывода, мы рекомендуем использовать конечные точки вывода.