基于人工智能来开发新产品和服务的初创企业数量正在大幅增长。与此同时,老牌企业也在迅速采取行动,利用人工智能带来的机遇和优势。
随着过去20年的计算革命,功能强大且易于使用的API被证明是连接计算基础设施和面向用户服务的重要工具。
在本文中,我们将演示如何在Graphcore(拟未)IPU上使用Hugging Face Optimum来加载和使用机器学习模型。然后,我们将设置一个FastAPI服务器为这些模型提供服务,并使用Uvicorn启动服务器。最后,我们将讨论批处理和打包、负载平衡以及使用优化模型等高级技术。
这些原则适用于托管IPU计算的任何位置。通过Gcore的云IPU服务[1]开始并尝试这些技术是一个不错的方法。
准备模型
如果您还没有安装Optimum和Hugging Face Transformer,则可以使用pip安装它们:
首先,我们要在IPU上加载情感分析模型。为此,我们将使用IPUConfig类 来指定IPU设置。
在这里,我们只指定要使用一个IPU。然后,我们使用pipeline函数来加载模型。
现在,要使用该模型,我们只需要使用文本输入来调用它:
使用Uvicorn构建并部署FastAPI服务器
在成功地将机器学习模型加载到Graphcore IPU上之后,下一步就是通过API使该模型可访问。
FastAPI与Uvicorn的配合使这项工作变得非常简单。令人惊讶的是,只需几行代码,您就可以让服务器启动并运行。
• FastAPI() 初始化FastAPI框架。
• IPU和模型配置与我们之前讨论的完全相同。
• @app.get("/predict") 设置了一个用于情感分析的HTTP GET方法。它使用IPU加载的模型对给定文本进行推理。
使用Uvicorn启动服务器
这将使用Uvicorn启动FastAPI应用程序,并可通过http://localhost:8000/predict?text=YourTextHere 进行访问。
使用Locust对FastAPI服务器进行压力测试
现在,您拥有了一个功能齐全且在Graphcore IPU上运行机器学习模型的FastAPI服务器,了解该服务器处理多个请求的能力至关重要。压力测试可以深入了解服务器的性能、可靠性和容量。Locust是用于压力测试HTTP服务的常用工具之一。
为什么选择Locust?
Locust是一款开源负载测试工具,您可以在Python代码中定义用户行为,然后模拟数百万用户对应用程序进行压力测试。它是一款灵活且强大的工具,可以帮助您识别系统中的瓶颈和限制。
创建Locustfile
使用以下Python代码创建locustfile.py,以定义压力测试的用户行为:
在这里,@task 修饰了模拟API调用的方法。我们指定模拟用户将在任务之间等待1到2秒(wait_time = between(1,2))。
分析结果
测试运行后,Locust 将提供服务器性能的实时统计数据,包括每秒请求量、平均响应时间等。当在Graphcore IPU上托管模型时,这些数据对于了解FastAPI服务器的性能表现非常有价值。
单个IPU性能
在使用单个IPU进行的初始测试中,当使用200个并发用户进行测试时,服务器每秒可处理500个请求,平均响应时间为20毫秒。
使用多个IPU进行扩展
Graphcore的技术是为可扩展性而设计的。通过使用 Uvicorn 中的 -workers选项,我们可以轻松地扩展应用程序以利用多个IPU。例如,使用16个IPU(-workers 16),性能几乎呈线性增长。
使用16个IPU时,服务器处理请求的能力大幅提升。最新的测试结果显示,服务器每秒可处理约 7400 个请求,响应时间约为 27 毫秒。

Graphcore IPU技术的多功能性不仅仅限于线性扩展。使用POD16设置,用户不仅可以从增强的性能中获益,还可以同时部署多个模型,每个模型都使用自己的IPU。该性能最大限度地提高了IPU的灵活性和能力,为各种应用和业务提供了显著优势。
POD16的架构确保每个IPU独立运行,从而消除了与共享资源相关的性能瓶颈。每个模型都在各自专用的 IPU 上运行,确保最佳性能和效率。
提高性能:批处理、打包等
在前面的部分中,我们介绍了使用FastAPI在Graphcore IPU上部署模型的基本步骤。然而,通往最佳性能的旅程并没有就此结束。可以采用批处理、序列打包和负载平衡等高级策略,进一步提高部署在IPU 上的模型的性能和效率。
批处理和序列打包
我们最初的示例很简单,没有实施批处理或序列打包。在实际应用中,特别是像BERT这样的模型,有效的序列打包和批处理可以显著提高性能。
Graphcore提供了详细的见解和方法来有效地实现BERT模型的序列打包。通过采用这些策略,推理性能可以提高多达9倍。欲了解详细信息和实操指南,请参阅Graphcore的往期文章
克服FastAPI的限制
虽然FastAPI是用于部署机器学习模型的强大且高效的工具,但必须认识到它的局限性,尤其是与Graphcore IPU等高性能硬件搭配时。如果没有通过配合优化实施和部署策略,IPU的性能潜力可能会受到限制。
在我们的示例中,由于FastAPI框架的固有限制,IPU 的性能没有得到充分发挥。为了释放IPU的全部潜力,集成先进的负载平衡技术和优化请求处理机制至关重要,可以采用NGINX等解决方案。您还可以查看我们的简单服务器框架示例[2]
POD16模型性能表
在使用Graphcore 的POD16 时,需要了解如何在可用的IPU上优化分配不同的机器学习模型,以实现最高性能。POD16 基础设施允许同时部署多个模型,每个模型可能需要不同数量的IPU来最大化效率和性能。
在此,我们举例说明如何在POD16 上加载不同的模型及其各自的性能,以展示POD16 有效处理具有不同需求的多种模型的能力:
试用Graphcore IPU
对于那些渴望亲身体验IPU 所带来的性能和效率提升的人来说,Paperspace[3]G-Core[4]等平台提供了一个可访问的切入点。
关于如何开始这一探索的详细步骤,Graphcore 官方文档提供了全面的入门指南。从好奇到具体实施的整个过程都有完善的支持,确保各级专业人员都能在其人工智能或机器学习项目中有效利用 IPU 的性能。
现在就按照本指南开始学习吧:Getting Started with Graphcore's IPU[5]
探索愉快,祝您在人工智能和机器学习之旅中取得新的飞跃!
[1]https://gcore.com/cloud/ai-platform
[2]https://github.com/graphcore/simple-server-framework
[3]https://www.paperspace.cohttps://docs.graphcore.ai/en/latest/getting-started.html#getting-startedm/graphcore
[4]https://gcore.com/cloud/ai-platform
[5]https://docs.graphcore.ai/en/latest/getting-started.html#getting-started
获取更多Graphcore资讯,阅读深度技术文章,并与其他创新者们一起交流,请至中国官网graphcore.cn,以及关注Graphcore微信、微博和知乎创新社区。
Graphcore中国官网
Graphcore官方微信
Graphcore微博创新社区
Graphcore知乎创新社区
点击阅读原文,查看英文blog。
继续阅读
阅读原文