Запуск Falcon на процессоре с Hugging Face Pipelines

Узнайте, как выполнять логические выводы с помощью 7-миллиардного и 40-миллиардного Falcon на процессоре Xeon 4-го поколения с конвейерами Hugging Face.

Легко предположить, что единственный способ, которым мы можем выполнять логические выводы с помощью LLM, состоящих из миллиардов параметров, — это использование графического процессора. Хотя графические процессоры действительно обеспечивают значительное ускорение по сравнению с центральными процессорами в глубоком обучении, аппаратное обеспечение всегда следует выбирать в зависимости от варианта использования. Например, предположим, что вашим конечным пользователям нужен ответ только каждые 30 секунд. В этом случае отдача уменьшается, если вы изо всех сил пытаетесь (финансово и материально) зарезервировать ускорители, которые дают вам ответы за ‹ 30 секунд.

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

В этой статье мы проведем инференс с Falcon-7b и Falcon-40b на процессоре Xeon 4-го поколения с использованием Hugging Face Pipelines. Falcon-40b — это модель декодера с 40 миллиардами параметров, разработанная Институтом технологических инноваций (TII) в Абу-Даби. Он превосходит несколько моделей, таких как LLaMA, StableLM, RedPajama и MPT, используя метод FlashAttention для достижения более быстрого и оптимизированного вывода, что приводит к значительному повышению скорости выполнения различных задач.

Настройка среды

Получив доступ к вычислительному инстансу Xeon, вы должны защитить достаточно места для загрузки контрольных точек и осколков моделей для Falcon. Мы рекомендуем обеспечить не менее 150 ГБ хранилища, если вы хотите протестировать как 7-миллиардную, так и 40-миллиардную версию Falcon. Вы также должны предоставить достаточно оперативной памяти для загрузки модели в память и ядра для эффективного выполнения рабочей нагрузки. Мы успешно запустили версии 7-Billion и 40-Billion Falcon на 32-ядерной виртуальной машине с 64 ГБ ОЗУ (4-го поколения Xeon) в Intel Developer Cloud. Однако это одна из многих действительных спецификаций вычислений, и дальнейшее тестирование, вероятно, улучшит производительность.

  1. Установите миниконду. Вы можете найти последнюю версию на их сайте: https://docs.conda.io/en/latest/miniconda.html.
  2. Создайте среду conda conda create -n falcon python==3.8.10
  3. Установить зависимости pip install -r requirements.txt . Вы можете найти содержимое файла requirements.txt ниже.
transformers==4.29.2
torch==2.0.1
accelerate==0.19.0
einops==0.6.1

# requirements.txt

4. Активируйте среду conda conda activate falcon

Бегущий сокол с обнимающими трубопроводами лица

Конвейеры Hugging Face предоставляют простой и высокоуровневый интерфейс для применения предварительно обученных моделей к различным задачам обработки естественного языка (NLP), таким как классификация текста, распознавание именованных сущностей, генерация текста и многое другое. Эти конвейеры абстрагируются от сложностей загрузки моделей, токенизации и логического вывода, позволяя пользователям быстро использовать современные модели для задач НЛП, написав всего несколько строк кода.

Ниже приведен удобный скрипт, который вы можете запустить в cmd/терминале, чтобы поэкспериментировать с необработанными предварительно обученными моделями Falcon.

from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
import argparse
import time


def main(FLAGS):
    
    model = f"tiiuae/falcon-{FLAGS.falcon_version}"
    
    
    tokenizer = AutoTokenizer.from_pretrained(model, trust_remote_code=True)
    
        
    generator = transformers.pipeline(
        "text-generation",
        model=model,
        tokenizer=tokenizer,
        torch_dtype=torch.bfloat16,
        trust_remote_code=True,
        device_map="auto",
    )

    user_input = "start"

    while user_input != "stop":

        user_input = input(f"Provide Input to {model} parameter Falcon (not tuned): ")
        
        start = time.time()

        if user_input != "stop":
            sequences = generator( 
            f""" {user_input}""",
            max_length=FLAGS.max_length,
            do_sample=False,
            top_k=FLAGS.top_k,
            num_return_sequences=1,
            eos_token_id=tokenizer.eos_token_id,)

        inference_time = time.time() - start
        
        for seq in sequences:
         print(f"Result: {seq['generated_text']}")
         
        print(f'Total Inference Time: {inference_time} seconds')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    
    parser.add_argument('-fv',
                        '--falcon_version',
                        type=str,
                        default="7b",
                        help="select 7b or 40b version of falcon")
    parser.add_argument('-ml',
                        '--max_length',
                        type=int,
                        default="25",
                        help="used to control the maximum length of the generated text in text generation tasks")
    parser.add_argument('-tk',
                        '--top_k',
                        type=int,
                        default="5",
                        help="specifies the number of highest probability tokens to consider at each step")
    
    FLAGS = parser.parse_args()
    main(FLAGS)

# falcon-demo.py

Чтобы запустить скрипт (falcon-demo.py), вы должны предоставить скрипт и различные параметры:

python falcon-demo.py --falcon_version "7b" --max_length 25 --top_k 5

Сценарий имеет 3 необязательных параметра, которые помогают контролировать выполнение конвейера Hugging Face:

  • falcon_version: позволяет выбирать из 7 миллиардов или 40 миллиардов версий параметров Falcon.
  • max_length: используется для управления максимальной длиной генерируемого текста в задачах генерации текста.
  • top_k: указывает количество токенов с наибольшей вероятностью для рассмотрения на каждом этапе.

Вы можете взломать скрипт, чтобы добавить/удалить/редактировать параметры. Важно то, что теперь у вас есть доступ к одной из самых мощных моделей с открытым исходным кодом, когда-либо выпущенных!

Игра с сырым соколом

Raw Falcon не настраивается для каких-либо конкретных целей, поэтому он, скорее всего, будет нести чепуху (рис. 2). Тем не менее, это не мешает нам задать несколько вопросов, чтобы проверить это. Когда сценарий завершит загрузку модели и создание конвейера, вам будет предложено ввести данные для модели. Когда будете готовы остановиться, введите «стоп».

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

Совет. Вы можете значительно изменить время вывода, изменив параметр max_length.

В этом учебном пособии рассказывается, как запустить Falcon на ЦП с Hugging Face Transformers, но не рассматриваются варианты дальнейшей оптимизации на ЦП Intel. Библиотеки, такие как Intel Extension for Transformers, предлагают возможности для ускорения моделей на основе Transformer с помощью таких методов, как квантование, дистилляция и обрезка. Квантование — это широко используемый метод сжатия моделей, который может уменьшить размер модели и уменьшить задержку логического вывода — это может быть ценным следующим шагом в изучении повышения производительности этого рабочего процесса.

Резюме и обсуждение

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

Хотя Falcon довольно демократичен с точки зрения открытого исходного кода, его размер создает новые проблемы для инженеров/энтузиастов. Это руководство помогло решить эту проблему, объединив «действительно открытую» лицензию Falcon, Hugging Face Pipelines и наличие/доступность ЦП, чтобы предоставить разработчикам более широкий доступ к этой мощной модели.

Вот несколько интересных вещей, которые стоит попробовать:

  • Настройте Falcon под конкретную задачу, используя Расширение Intel для PyTorch
  • Используйте инструменты сжатия модели, доступные в Intel Neural Compressor (INC) и Intel Extension for Transformers.
  • Поэкспериментируйте с параметрами конвейеров Hugging Face, чтобы оптимизировать производительность для вашего конкретного варианта использования.

Не забудьте подписаться на мой профиль, чтобы увидеть больше статей вот так!