Запуск 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. Однако это одна из многих действительных спецификаций вычислений, и дальнейшее тестирование, вероятно, улучшит производительность.
- Установите миниконду. Вы можете найти последнюю версию на их сайте: https://docs.conda.io/en/latest/miniconda.html.
- Создайте среду conda
conda create -n falcon python==3.8.10
- Установить зависимости
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, чтобы оптимизировать производительность для вашего конкретного варианта использования.
Не забудьте подписаться на мой профиль, чтобы увидеть больше статей вот так!