1.LLM的同步:
LLM如果只使用huggingface或者魔搭社区上的方法创建大模型时,通常你是在以同步的方式与模型进行交互。这意味着当你发送一个请求给模型(例如生成文本),你需要等待直到该请求完成并返回结果,期间你的程序会处于阻塞状态。
这就是LLM的同步,同步调用可能会导致资源利用率不高,因为每次调用都会占用线程直到操作完成,代码也易于理解编写,仅仅适合适合于单用户环境或低并发需求的应用场景。
2.LLM的异步:
如果以异步方式与LLM进行交互时,可以发送多个请求而无需等待每个请求完成,这可以显著提高效率,尤其是在处理多个并发请求或长时间运行的任务时。异步引擎能够更好地利用系统资源,因为它可以在等待I/O操作完成的同时执行其他任务,从而实现更高效的多任务处理。虽然提供了更高的性能和灵活性,但编写和管理异步代码可能会增加开发的复杂性,需要开发者对异步编程有一定的了解。
更适合于高并发、高性能要求的服务端应用,如在线API服务、实时聊天机器人等。
3. 多并发测试
下述部分代码用于发送多线程请求,测试模型推理速度(是否是多并发,即是否支持异步)
还可以通过输出底层大模型的的每一个字符,看看大模型对于多请求是否在同时推理(原大模型一次只能推理一个任务,必须要设置多并发才可以同时推理多个·任务)
# 实现了一个多线程的客户端,用于并发地向指定的HTTP端点发送POST请求。
# 这段代码的目的式评估一个远程API接口(通过HTTP POST请求访问)在并发情况下的性能,特别是其流式输出处理的能力。它能够帮助开发者了解服务在高并发情况下的响应速度和稳定性,以及是否有瓶颈存在。这对于优化服务性能和调整系统配置非常有用。
import json
import threading
import requests
import time
llm_sudu = []
# 一个锁对象,确保在多个线程尝试同时修改llm_sudu列表时的安全性。
lock = threading.Lock()
url = "http://ip/address"
# 自定义线程类,继承自 threading.Thread,用于执行并发的HTTP POST请求
class RequestThread(threading.Thread):
def __init__(self