Многие из нас используют GPT-3 или другие LLM по модели SaaS, размещенные у их поставщиков. Но каково запускать модель размером с GPT-3 в собственном облаке?

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

BLOOM – BigScience Large Open-science Multilingual Language Model с открытым доступом представляет собой языковую модель на основе преобразователя, созданную более чем 1000 исследователей( подробнее о проекте BigScience). Тренировался примерно на 1,6 ТБ предварительно обработанного многоязычного текста. Это бесплатно — все желающие могут попробовать его. Размер самой большой по параметрам модели BLOOM составляет 176 байт, что примерно соответствует размеру самой успешной языковой модели — модели GPT-3 OpenAI. Также доступны модели меньшего размера, с 7b, 3b, 1b7 и т. д.

Зачем создавать собственную модель, если можно использовать коммерческие модели как SaaS, как воду из-под крана? Среди многих причин основным аргументом является полная суверенность данных — данные для предварительного обучения и данные, введенные пользователями, остаются полностью под вашим контролем, а не под контролем компании, занимающейся искусственным интеллектом. И для BLOOM пока нет реального хостингового решения SaaS.

Хорошо, а как это сделать?

Размер модели

Для работы нашей модели Bloom требуется около 360 ГБ ОЗУ — требование, которое вы не можете получить одним двойным нажатием кнопки на классическом облачном хостинге, а также это довольно дорого.

К счастью, Microsoft предоставила вариант с уменьшенной выборкой с весами INT8 (из исходных весов FLOAT16), который работает на движке DeepSpeed ​​Inference и использует тензорный параллелизм. DeepSpeed-Inference представляет несколько функций для эффективного обслуживания моделей PyTorch на основе преобразователя. Он поддерживает модельный параллелизм (MP) для больших моделей, которые иначе не поместились бы в памяти графического процессора.

Вот дополнительная информация о минимизации и ускорении модели с помощью DeepSpeed ​​и Accelerate.

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

Настройка хостинга

Наш хостер для модели — AWS, потому что он предоставляет установку SageMaker для контейнера Deep Learning, способного инициализировать модель. Инструкции по этому поводу можно найти здесь:
Разверните BLOOM-176B и OPT-30B на Amazon SageMaker с помощью контейнеров глубокого обучения для вывода больших моделей и DeepSpeed.

Пожалуйста, обратите внимание только на часть Bloom 176b, часть OPT не имеет значения для наших целей.

В AWS вам нужно найти подходящий центр обработки данных, чтобы настроить модель. Требуемой мощности нет нигде. Мы отправились на восточное побережье, в Вирджинию, на us-east-1.amazonaws.com. Вы должны получить необходимые вам экземпляры через поддержку, вы не можете сделать это самостоятельно. Вам нужно 8 видеокарт Nvidia A100 с 40 ГБ ОЗУ каждая.

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

Загрузите модель

Размещенную модель можно загрузить из репозитория Microsoft на Huggingface в S3 в том же центре обработки данных — что мы и сделали, чтобы модель была близка к среде выполнения — или вы можете использовать модель, предоставленную AWS. в общедоступной среде S3. Размер модели – 180 ГБ.

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

Готово. Модель BLOOM 176B запущена.

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

Используйте модель

Мы поместили пользовательский API-шлюз и лямбда-функцию в интерфейс поверх конечной точки Sagemaker, которая позволяет пользователям подключаться извне с помощью ключа API — это упрощает использование и вызовы. Ищите здесь введение.

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

smr_client.invoke_endpoint(
    EndpointName=endpoint_name,
    Body=json.dumps(
        {
            "input": "The BLOOM large language model is a",
            "gen_kwargs": {
                "min_length": 5,
                "max_new_tokens": 100,
                "temperature": 0.8,
                "num_beams": 5,
                "no_repeat_ngram_size": 2,
            },
        }
    ),
    ContentType="application/json",
)["Body"].read().decode("utf8")

Сначала мы протестировали интерфейс модели с меньшей моделью BLOOM, 1B7 (с SageMaker JumpStart), а затем, когда все заработало, с большой моделью 176B.

Ну и что в итоге?

Мы позволяем модели сделать два приветствия и одно прощание:

Это работает!

Красивой, но не очень специфичной моделью Goodbye-World я хотел бы закрыть этот год. Я поделюсь результатами некоторых тестов возможностей с моделью BLOOM в следующей истории.

Большое спасибо, ganz, ganz lieben Dank
Томасу Бергманну
Лео Соколову
Нихилу Менону
Кирстен Купперс

за помощь в настройке и статью.

Все цветные изображения созданы с помощью DALL-E 2 от OpenAI.

Пожалуйста, не стесняйтесь задавать мне вопросы о настройке BLOOM.