在这篇博文中,我将逐步引导您在您自己的 AWS SageMaker 实例上运行 MosaicML 的ChatGPT竞争对手 MPT-7B。
您是否对 ChatGPT 的功能感到兴奋,但又担心将您的敏感数据暴露给 OpenAI?幸运的是,有一些替代方案可以在您自己的基础设施上运行。其中一个替代方案是 MosaicML 的 MPT-7b,它是 ChatGPT 的竞争对手,我们将在本博文中对其进行探讨。
MosaicML 最近被 Databricks 以 13 亿美元收购,其 MPT-7B 模型一直在 ML 社区掀起波澜,该模型被认为是 ChatGPT 的竞争对手。尽管有这样的承诺,但由于文档稀疏且资源需求繁重,运行该模型可能会令人望而生畏。然而,人们可以在 Jupyter Notebook 中的 AWS SageMaker 上运行 MPT-7B,这是一种对初学者友好且高度灵活的快速迭代环境。此设置允许您在决定投入生产之前测试模型的可行性和硬件要求。
在 AWS SageMaker 上的 Jupyter 笔记本中运行 MPT-7B 具有多项优势。您不仅可以根据使用的内容付费并在完成后将其关闭,而且无需重新加载模型即可轻松重新运行部分代码,从而节省了迭代开发期间的时间。但要小心!如果您忘记停止笔记本实例,费用可能会迅速增加。
虽然这种方法相对方便,但您必须考虑一些注意事项。首先,即使在高性能 GPU 上,加载模型也可能需要长达 20 分钟的时间,使得此过程有些耗时。此外,成本也是一个需要考虑的因素,因为运行成本至少为每小时 4 美元。您需要至少在p3.2xlarge实例上运行 MPT-7B;任何更小的似乎都不可行。如果您选择 EC2 而不是 SageMaker,则必须向 AWS 请求使用p3.2xlarge实例的权限。
在接下来的部分中,我将逐步引导您了解如何在您自己的 SageMaker jupyter 笔记本中运行 MPT-7B 模型:
启动 AWS 控制台并搜索 SageMaker:
从左侧菜单中,选择笔记本->笔记本实例:
单击创建笔记本实例按钮:
指定实例名称。选择实例类型m1.p3.2xlarge 。不幸的是,似乎需要像m1.p3.2xlarge这样强大的实例,否则您的实例可能会耗尽内存或花费过多的时间来响应即使是最简单的问题。但是,请注意,此实例的费用约为 4 美元/小时,因此仔细监控您的使用情况非常重要。
如果您的测试环境中没有任何特别敏感的数据,那么您可以授予对任何 S3 存储桶的访问权限。否则,你需要更加明确。
然后笔记本将处于待处理状态。这可能会持续大约 10 分钟:
与此同时,我们将下载一个笔记本,以便在 AWS SageMaker 实例完成预置后上传它。
前往AWS SageMaker.ipynb 上的 MPT-7B处的笔记本并下载它:
在此笔记本中,您会注意到两个主要代码块。第一个块加载 MPT-7B 分词器和模型:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
分词器用于对发送到模型的问题进行编码并对来自模型的响应进行解码。此外,我们还获取 GPU 的设备规格,以便我们可以配置模型以供稍后使用:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
请注意stopping_critera
的使用,这是必需的,否则模型将开始胡言乱语,即使它已经回答了我们的问题。
如果您想探索不同的选项,请参阅模型生成参数。
现在,让我们将此笔记本上传到 SageMaker。
希望此时您的 SageMaker 笔记本实例已完成配置。出现后,单击“打开 Jupyter”链接:
然后,单击屏幕右上角的上传按钮并选择您刚刚下载的笔记本:
将内核设置为conda_python3 :
选择单元格 -> 运行全部:
然后,浏览器选项卡中将出现一个沙漏徽标:
然后您需要等待大约 10 分钟才能下载模型:
运行后,您将看到问题向我解释核裂变和聚变之间的区别的答案:
由于上面已经加载了模型和分词器,因此您只需修改ask_question代码块并单击“运行”按钮即可询问任何其他问题。这将节省您每次要测试新问题时花费 10 分钟的时间。
完成模型测试后,您将需要返回笔记本实例列表并停止它。如果你不这样做,每小时 4 美元的加起来很快 💸
在性能方面,我的初步测试表明MPT-7B的结果可能不如ChatGPT。它可以很好地回答以下问题:
但对于像_伯利兹的首都是什么?_这样的问题,它失败得非常可怕:
我目前正在收集更多数据,并将在后续博文中进行全面的对比分析。在那篇文章中,我将使用实际对话历史记录来比较 MPT-7B、MPT-30B、Falcon-40b 和 ChatGPT 的问答性能。
一旦您准备好从测试过渡到生产,SageMaker 就会提供额外的好处 - 能够为您的模型创建端点。借助 SageMaker,您可以根据端点的需求自动扩展,从而优化您的资源。
请注意,在 Jupyter 笔记本中运行时,您的进程很容易出现分叉并耗尽内存。如果发生这种情况,只需关闭内核并再次运行所有命令即可。
如果您想在 AWS 以外的平台上运行此模型,Google Colab Pro 是另一个可行的选择,价格为 9 美元/月。然而,根据我们的测试,我们发现我们在短短几个小时内就耗尽了提供的积分。 😳
您可能面临的另一个挑战是由于 CUDA 版本不兼容而无法在 SageMaker 上利用Triton 优化。不幸的是,AWS 当前的 P3 实例不包含最新的 CUDA 版本。因此,如果您希望利用 Triton 优化,您将需要创建一个具有命令行访问权限的 EC2 容器。但请务必注意,您还需要 AWS Support 的特殊权限才能运行具有 8 个 VCPU 的实例。在以后的文章中,我将提供有关如何集成 Triton 并利用更具成本效益的 GPU 云提供商(例如Lambda Labs)的详细指南。
虽然 MosaicML 的 MPT-7B 为 OpenAI 的 ChatGPT 提供了可行的替代方案,但它也面临着一系列挑战。运行模型可能非常耗时、昂贵,而且缺乏可用的文档。然而,对于某些用例来说,将模型保留在内部并保护数据不被暴露给 OpenAI 的能力可能非常引人注目。
SageMaker 为快速测试模型提供了极大的便利,并在您准备好时提供了过渡到生产的灵活性。无论您是刚刚开始使用 MPT-7B 还是已经使用了一段时间,我们希望本指南能够提供有价值的见解。
请继续关注我们的下一篇博文,我们将更深入地研究 MPT-7B、MPT-30B、Falcon-40b 和 ChatGPT 之间的性能比较。
如果您有兴趣了解有关MPT-7B或其更大变体MPT-30B 的更多信息,请参阅以下链接。
请记住,无论您使用 ChatGPT 还是 MPT-7B,关键是确保在不损害数据隐私和成本效益的情况下满足您的用例。快乐修补!
在MindfulDataAI.com ,我们为企业提供 ChatGPT。如果您有兴趣将 ChatGPT、MPT 或其他模型与您公司的数据结合使用,请与我们联系。