DeepSpeed-MII 当发送长度较大的输入时,出现服务错误,

rpppsulh  于 3个月前  发布在  其他
关注(0)|答案(4)|浏览(47)

你好,我正在使用MII为模型llama-2-7b-hf提供服务,并设置了tensor-parallel参数为1。当输入不是很长时,输出可以正常生成。然而,当输入长度达到例如2000时,出现了一个错误:

smdnsysy

smdnsysy1#

@frankxyy 我刚刚用相同的模型和Tensor并行进行了测试,能够通过一个2000个标记的输入生成文本,所以我还没有成功地复现这个错误。你能分享一些可以复现这个问题的示例代码吗?另外,你能提供一下你正在使用的GPU信息吗?谢谢!
@cmikeh2 对于这个错误有什么想法吗?

q5lcpyga

q5lcpyga2#

你好,@mrwyattii ,
这是我的服务代码:

import mii

model_dir = '/home/xuyangyang/llama-2-7b-hf'
# model_dir = '/mnt/cephfs/nlp_group/llama2_pre_sft_ckps/sagenova-ext-vocab80k-370000-rb20k'
# model_dir = '/mnt/cephfs/nlp_group/llama2_pre_sft_ckps/sagenova-sft_v4-base225k-step150'
# model_dir ='/home/xuyangyang/Yi-6B-200K-Llamafied/'

client = mii.serve(model_dir,\
    tensor_parallel=1)

# client = mii.serve("/home/xuyangyang/llama-2-13b-chat-hf",\
#     tensor_parallel=2)

这是我的客户端代码:

import mii
import time
from transformers import LlamaTokenizer

start_token = "<s>"
end_token = "</s>"
inst_start = "[INST]"
inst_end = "[/INST]"
sys_start = "<<SYS>>"
sys_end = "<</SYS>>"

# query_taxi = ["2023-04-10 08:20:11 [INFO] 用户ID: 102938, 请求打车服务, 起点: 莲花山公园, 终点: 明珠商务广场\n2023-04-10 08:20:15 [DEBUG] 用户ID: 102938, 派单成功, 车辆ID: A12345, 司机姓名: 张三\n2023-04-10 08:25:20 [INFO] 用户ID: 102938, 上车, 车辆ID: A12345, 司机姓名: 张三\n2023-04-10 08:55:32 [INFO] 用户ID: 102938, 下车, 车辆ID: A12345, 司机姓名: 张三, 行程金额: 85.5元\n2023-04-10 08:55:35 [DEBUG] 用户ID: 102938, 支付成功, 金额: 85.5元\n2023-04-11 13:10:45 [INFO] 用户ID: 102938, 请求打车服务, 起点: 世纪大道地铁站, 终点: 欢乐谷\n2023-04-11 13:10:49 [DEBUG] 用户ID: 102938, 派单成功, 车辆ID: B23456, 司机姓名: 李四\n2023-04-11 13:15:01 [INFO] 用户ID: 102938, 上车, 车辆ID: B23456, 司机姓名: 李四\n2023-04-11 13:50:20 [INFO] 用户ID: 102938, 下车, 车辆ID: B23456, 司机姓名: 李四, 行程金额: 120.0元\n2023-04-11 13:50:24 [DEBUG] 用户ID: 102938, 支付成功, 金额: 120.0元\n基于以上日志信息回答:这个用户在2023年4月11日从世纪大道地铁站到欢乐谷的行程中,支付了多少费用?",
# "用户询问:我想画一幅户型效果图,输入是一个2D户型图,想得到3D的\napi集合描述如下:\n家具库API:该API提供了一个家具库,其中包含各种不同类型和风格的家具,例如沙发、床、桌子等等。用户可以通过此API获取家具库中的对象,并将其添加到户型图中。\n可视化效果API:该API可以将用户生成的2D或3D户型图转化为高质量的渲染图像。用户可以选择不同的视角和光线设置,以及应用不同的滤镜和效果,来生成满意的可视化效果。\n户型图生成API:该API可以接受房屋尺寸、房间数量、门窗位置和布局等信息,自动生成符合用户需求的户型图。\n材料库API:该API提供了一个材料库,其中包含各种不同类型和风格的材料,例如地板、墙壁、天花板等等。用户可以通过此API获取材料库中的对象,并将其应用到户型图中的相应部分。\n分享和导出API:该API允许用户将生成的户型图导出为不同的文件格式,例如PNG、JPEG、PDF等等,以便用户与他人分享和打印。此API还支持将户型图上传至云端存储服务,例如Google Drive和Dropbox,方便用户随时随地访问和编辑。\n请基于用户需求和api描述从api集合中挑选出一个最合适的api",
# "请总结以下对话。\n客户: 你好,我正在寻找一个设计师来设计我的新房子。你能帮我吗?\n房屋设计师: 当然可以。我们可以先讨论一下你的预算和你对这个房子的期望。\n客户: 我的预算是100万左右,我希望我的房子有四个卧室和三个浴室。我还想要一个开放式的厨房和客厅,以及一个带壁炉的起居室。\n设计师: 这听起来像是一个不错的计划。你是否有任何特别的要求,例如可以容纳多少人或者需要额外的储藏空间?\n客户: 我们的家庭有五口人,所以需要足够的空间。此外,我希望有一个带车库的车道,可以容纳两辆车。我还希望有一个带独立浴缸的主卧室套间。\n设计师: 我完全理解你的要求。我们可以为你设计一个非常实用且现代化的房子,以最大化你的生活质量。我们可以用一些高端的材料和设备来装修房子,以确保它的价值和可持续性。\n客户: 非常感谢你的建议。你有什么样的设计理念或者建议吗?\n设计师: 我们可以考虑使用一些环保的材料,例如太阳能电池板、可再生材料和高效能的隔热材料。我们还可以在客厅里添加一些大型的落地窗,以提供更好的自然光线和通风。我们可以设计一个现代化的开放式平面图,以最大化空间利用率和功能性。同时,我们还可以为您提供一些优美的景观设计,例如花园和水景。\n客户: 非常感谢你的建议和建议。听起来这将是一个非常完美的家园。我们期待着看到你的设计。"]
query = "东村家园小区附近有电影院吗?"

def get_prompt(slice: str, query: str) -> str:
    prompt = (
        "### 阅读材料:\n"
        "{slice}\n\n"
        "请仔细阅读以上文本,并根据文本内容回答问题。注意:\n"
        "- 不要参考外部知识或历史信息\n"
        "- 请务必只提供与问题直接相关的答案,不用给出分析,也不用发散或者补充不相关的内容,尽量保证答案简短\n\n"
        "### 问题:\n"
        "{query}\n\n"
    ).format(slice=slice, query=query)
    return prompt

# model_dir = '/home/xuyangyang/llama-2-7b-hf'
model_dir = '/mnt/cephfs/nlp_group/llama2_pre_sft_ckps/sagenova-ext-vocab80k-370000-rb20k'
client = mii.client(model_dir)

slice = """总户数:915\n北京城北龙城医院等医院位于板块内,完善了板块的医疗资源;\n整体来看,板块各配套发展相对完善,未来发展空间较小,不具备投资的潜力,适合刚需置业。\n小区优点:小区外立面维护的比较好,不显老旧;\n小区绿化率约35%,环境较好。\n小区缺点:小区停车位不足,影响居民停车;\n小区于2000年竣工,楼龄较老。\n地段交通:距离小区约578m有育新地铁站,该站途经地铁8号线,方便居民乘坐地铁出行;\n距离小区约131m有东村家园南门公交站,该站停靠专89路公交车,方便居民乘坐公交出行;\n距离小区约191m有文博路,方便居民自驾出行。\n附近学校:距离小区约417m有绿贝儿幼稚园(黄土东村路),该幼儿园是公立*;\n距离小区约267m有昌平回龙观第二*,该是公立;\n距离小区约637m有首师大附属育新*,该是公
立;\n整体来看,小区周边教育资源比较丰富,方便居民子女上学。\n小区环境:小区绿化率约35%,小区内有花园,花园内景观植物较多,道路两旁有绿化带,树木生长的高大茂盛;\n小区配有健身设施、儿童娱乐设施,天气好的时候,老人和小孩在此玩乐;\n小区路面平整干净,整体环境较好。\n小区建筑特色:小区整体建筑以简约大方为主,外立面以咖色的涂料为主;\n小区楼龄虽
老,但物业将外立面维护的比较好,整体墙面没有出现脱落的现象,不显老旧。\n楼栋分布:小区共有11栋楼,容积率为1.21;\n小区户型有2-3居室,小区户型面积约49m2-108m2,小区户型南北通透,采光充足。\n出入口:小区有4个出入口,东门位于文华路附近,机动车和行人都可通行;\n西门位于太平庄北街与文博路交叉口北130m附近;\n南门可以通往太平庄北街,仅行人通行;\n地
上停车场位于6号楼的南侧,仅车辆可以通行。\n公共设施:小区花园;\n运动场地;\n活动中心;\n康乐设施;\n儿童游乐设施。\n物业服务水平:小区物业人员做事比较认真,及时修剪小区内的绿植,公共设施维护也比较及时,确保居民在使用过程中的安全,小区楼龄比较老,但物业将外立面维护的比较好;\n小区保洁人员每天打扫楼道和主干道的垃圾,会及时清理小区内的生活垃圾,小区卫生较为干净整洁。\n安保:小区各出入口都有保安亭,有充足的保安轮流值班,外来人员进出小区需要登记,防止陌生人随意进出,能够较好的保障居民的居住安全;\n小区内有完善的监控设备,并与110联网,如果有突发情况,警察会及时赶到,进一步保障了小区内居民的人身和财产安全。\n物业公司:小区物业为北京回龙观东村物业管理有限公司。\n物业费:0.8元/m2/月\n总停
车位数量:100\n地下车位数量:50\n车位比:0.11\n地面停车费每月:150.00\n地下停车费每月:150.00\n商业配套:小区周边商业配套比较齐全,距离小区约218m有三旗百汇购物中心,方便居民逛街购物;\n距离小区约272m有物美超市(三旗百汇店),居民日常采购比较方便;\n距离小区约259m有7-ELEVEn(文化路东侧店),方便居民购买日常所需用品。\n医疗资源:小区周边医疗资源比较完善,距离小区约2.3km有北京市昌平区中西医结合医院,方便居民就医;\n距离小区约570m有北京市海淀区西三旗街道新材社区卫生服务站,方便居民感冒时就诊;\n距离小区约82m有海兴堂药房(总店),居民买药比较方便。\n生活服务:小区周边生活配套比较丰富,距离小区约160m有旺发菜市场,居民购买食材比较方便;\n距离小区约285m有中国工商银行(北京龙泽支行),居民存取款比
较方便;\n距离小区约221m有中国电信(太平庄北街营业厅),居民办理通讯业务比较方便。\n公共资源:小区周边公共设施较多,距离小区约499m有南店公园,居民可以在周末带家人来此游玩;\n距离小区约1.4km有回龙观派出所,能够负责附近的治安情况;\n距离小区约1.8km有龙泽园街道办事处,居民处理相关问题比较方便。\n距离小区约282m有保利国际影城(龙旗购物中心店)\n距离小
区约831m有日晔兴KTV,方便居民唱歌娱乐;\n距离小区约391m有VigourMax健身工作室,居民平时健身比较方便。\n卖房建议:小区距离菜市场较近,并且户型面积大小适中,业主可将房屋出售给安置老人的购房者,一定程度上可提高成交率;\n小区周边交通比较便利,业主可以将人群定位为在附近上班的白领人群,利于加快出售速度。\n买房建议:小区内健身娱乐设施比较齐全,对于打
算安置老人的购房者,建议购买49m2左右的2居室,打扫起来不费力,选择低层居住还可以方便出行;\n建议年轻的上班族选择面积约50m2的2居室,可以选择办理分期贷款,缓解经济压力。\n租房建议:小区周边交通比较便利,建议单身的租客选择与人合租50m2左右的2居室,分摊后的房租费以及物业费都较低,可以减轻经济负担;\n对于家庭租户来说,可以选择整租约71m2的3居室,户型
面积虽小,但房间充足,可以满足居住需求。\n居住体验:小区内健身娱乐设施和休息区域比较齐全,有利于居民的身心健康;\n小区平时会开展一些活动,居民之间互帮互助,居住氛围较好;\n小区距离地铁站较近,上下班比较方便;\n邻里之间相处融洽,居民居住体验较好。\n业主特征:小区基本是业主自住,业主多为公司白领,居民素质较高;\n小区还有一部分是以三代同堂为主,
由老人来帮忙照顾小孩,居住氛围融洽,平时多在小区的活动区域娱乐,氛围积极向上。\n燃气费:2.28元/m3\n水费:第一阶梯5元/m3,第二阶梯7元/m3,第三阶梯9元/m3\n电费:第一阶梯(不满1千伏0.483/1千伏及以上0.4783),第二阶梯(不满1千伏0.5383/1千伏及以上0.5283),第三阶梯(不满1千伏0.7883/1千伏及以上0.7783)"""

# query = "东村家园小区附近有电影院吗?"

prompt = get_prompt(slice, query)
prompt = f"{start_token} {inst_start} {sys_start}\n\n{sys_end}\n\n{prompt} {inst_end} "

# prompt = '你是谁'

start_time = time.time()
# print("length of prompt is", len(prompt))
max_new_tokens = 200

print("prompt is ", prompt)
# response = client.generate(query[0][:50], max_new_tokens=max_new_tokens)

print("prompt len", len(prompt[:2000]))
response = client.generate(prompt[:2000], max_new_tokens=max_new_tokens)
end_time = time.time()
print('type of response', type(response))
print("response is", response)

tot_time = end_time-start_time
print("tot time elapsed", tot_time)

tokenizer = LlamaTokenizer.from_pretrained(model_dir, legacy=False)
inputs = tokenizer(response.response[0], add_special_tokens=False)
prompt_token_ids = inputs['input_ids']

print("len of str", len(response.response[0]))
print("len of response", len(prompt_token_ids))
print('time per token is {}'. \
      format( (tot_time) / len(prompt_token_ids) ))

我的GPU环境是:

bvhaajcl

bvhaajcl3#

@frankxyy 执行 prompt[:2000] 不能给你2000个令牌。不同的模型分词器以不同的方式分割单词/符号。我刚刚运行了你的示例,使用llama-2-7B模型的提示有2889个令牌。
尝试将 max_length 设置为更高的值:

response = client.generate(prompt[:2000], max_new_tokens=max_new_tokens, max_length=4096)
z9gpfhce

z9gpfhce4#

谢谢,看来这就是问题所在。

相关问题