Press "Enter" to skip to content

在使用Hugging Face Pipelines时在CPU上运行Falcon

图片来源

学习如何使用Hugging Face Pipelines在4th Gen Xeon CPU上运行7亿和40亿Falcon的推断

很容易认为运行由数十亿个参数组成的LLMs的推断的唯一方法是使用GPU。尽管GPU在深度学习中比CPU提供了显着的加速,但硬件应始终根据用例进行选择。例如,假设您的最终用户每30秒只需要一次响应。在这种情况下,如果您在努力(在财务和后勤方面)保留加速器以在小于30秒内获得答案,则会出现收益递减。

图1.从最终用户到硬件和软件堆栈的工作反向思考-像“计算感知的AI开发人员”一样思考-作者图片

这一切都归结为一个基本原则,即成为“计算感知的AI开发人员”-从应用程序的目标到正确的软件和硬件的工作反向。想象一下开始一个家庭项目,比如挂一个新的架子,然后直接去拿大锤子,甚至没有考虑更小更精确的锤子是这个项目的正确工具。

在本文中,我们将使用Hugging Face Pipelines在4th Generation Xeon CPU上运行Falcon-7b和Falcon-40b的推断。 Falcon-40b是由阿布扎比技术创新研究所(TII)开发的一个400亿参数的解码器模型。它优于多个模型,例如LLaMA,StableLM,RedPajama和MPT,利用FlashAttention方法实现更快速和优化的推断,从而在不同任务中实现显着的速度提升。

环境设置

一旦您访问了您的Xeon计算实例,您必须保证有足够的存储空间来下载Falcon的检查点和模型分片。如果您想测试7亿和400亿Falcon版本,我们建议您至少保留150 GB的存储空间。您还必须提供足够的RAM将模型加载到内存中并提供足够的内核以有效地运行工作量。我们成功地在英特尔开发人员云上的32核64GB RAM VM(第4代Xeon)上运行了7亿和40亿Falcon版本。但是,这只是许多有效计算规格之一,进一步测试可能会改善性能。

  1. 安装miniconda。您可以在其网站上找到最新版本:https://docs.conda.io/en/latest/miniconda.html
  2. 创建一个conda环境conda create -n falcon python==3.8.10
  3. 安装依赖项pip install -r requirements.txt。您可以在下面找到要求.txt文件中的内容。
transformers==4.29.2torch==2.0.1accelerate==0.19.0einops==0.6.1# requirements.txt

4.激活您的conda环境conda activate falcon

使用Hugging Face Pipelines运行Falcon

Hugging Face Pipelines为将预训练模型应用于各种自然语言处理(NLP)任务(如文本分类,命名实体识别,文本生成等)提供了简单且高级的接口。这些管道抽象出了模型加载,标记化和推断的复杂性,使用户能够仅使用几行代码快速利用最先进的NLP任务模型。

下面是一个方便的脚本,您可以在cmd/终端中运行它来尝试原始预训练的Falcon模型。

from transformers import AutoTokenizer, AutoModelForCausalLMimport transformersimport torchimport argparseimport timedef 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")    parser.add_argument('-it',                        '--inference_time',                        type=bool,                        default=True,                        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 pipeline的执行:

  • falcon_version:允许您从Falcon的70亿或400亿参数版本中进行选择。
  • max_length:用于控制文本生成任务中生成的文本的最大长度。
  • top_k:指定在每个步骤中考虑的最高概率标记的数量。

您可以黑掉脚本以添加/删除/编辑参数。重要的是,现在您可以访问有史以来发布的最强大的开源模型之一!

玩转Raw Falcon

Raw Falcon未针对任何特定目的进行调整,因此它可能会产生无意义的结果(图2)。尽管如此,这并不妨碍我们提出一些问题来测试它。当脚本完成下载模型并创建pipeline时,您将被提示向模型提供输入。当您准备好停止时,请键入“stop”。

Figure 2. Command line interface inference test of 7 Billion Parameter Falcon Model on Intel 4th Gen Xeon with default script parameters — Image by Author

脚本会打印推断时间,以便您了解模型根据当前提供给pipeline的参数和您为此工作负载提供的计算所需的时间。

提示:通过调整max_length参数,您可以显著改变推断时间。

本教程旨在分享如何在Hugging Face Transformers上使用CPU运行Falcon,但不探讨在Intel CPU上进一步优化的选项。像Intel Extension for Transformers这样的库提供了通过量化、蒸馏和剪枝等技术加速基于Transformer的模型的能力。量化是一种广泛使用的模型压缩技术,可以减小模型大小并提高推断延迟 — 这将是探索增强此工作流程性能的有价值的下一步。

摘要和讨论

基础LLM为开发人员构建令人兴奋的AI应用程序创造了机会。然而,通常找到允许商业衍生产品的正确许可证的模型是一场斗争。Falcon提供了一个罕见的机会,因为它交叉了性能和许可证灵活性。

尽管从开源的角度来看,Falcon相当民主,但其规模为工程师/爱好者创建了新的挑战。本教程通过结合Falcon的“真正开放”的许可证,Hugging Face Pipelines以及CPU的可用性/可访问性,帮助解决了这个问题,为开发人员提供了更多访问这个强大模型的机会。

尝试一些令人兴奋的事情:

  • 通过利用Intel Extension for PyTorch来微调Falcon以执行特定任务
  • 使用Intel Neural Compressor(INC)和Intel Extension for Transformers中提供的模型压缩工具
  • 通过调整Hugging Face pipelines的参数来优化特定用例的性能。

不要忘记关注 我的个人资料,以获取更多类似的文章!

Leave a Reply

Your email address will not be published. Required fields are marked *