开发者社区> 问答> 正文

codeFuse在本地推理特别慢,怎么提速

我再modelscope环境下,使用https://modelscope.cn/models/codefuse-ai/CodeFuse-StarCoder-15B/summary 里面的quickstart代码,然后部署到4个T4卡的机器上,结果出来特别慢,要10分钟以上(不包括下载和加载模型这些时间)


import torch
from modelscope import (
    AutoTokenizer, 
    AutoModelForCausalLM,
    snapshot_download
)
model_dir = snapshot_download('codefuse-ai/CodeFuse-StarCoder-15B',revision = 'v1.0.0')
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True, use_fast=False, legacy=False)
tokenizer.padding_side = "left"
tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids("<fim_pad>")
tokenizer.eos_token_id = tokenizer.convert_tokens_to_ids("<|endoftext|>")
tokenizer.pad_token = "<fim_pad>"
tokenizer.eos_token = "<|endoftext|>"
# try 4bit loading if cuda memory not enough
model = AutoModelForCausalLM.from_pretrained(model_dir,
                                             trust_remote_code=True,
                                             load_in_4bit=False,
                                             device_map="auto",
                                             torch_dtype=torch.bfloat16)
model.eval()

HUMAN_ROLE_START_TAG = "<|role_start|>human<|role_end|>"
BOT_ROLE_START_TAG = "<|role_start|>bot<|role_end|>"

text = f"{HUMAN_ROLE_START_TAG}write a python function of quick sort.{BOT_ROLE_START_TAG}" 
inputs = tokenizer(text, return_tensors='pt', padding=True, add_special_tokens=False).to("cuda")
outputs = model.generate(
        inputs=inputs["input_ids"],
        attention_mask=inputs["attention_mask"],
        max_new_tokens=512,
        top_p=0.95,
        temperature=0.1,
        do_sample=True,
        eos_token_id=tokenizer.eos_token_id,
        pad_token_id=tokenizer.pad_token_id
    )
gen_text = tokenizer.batch_decode(outputs[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(gen_text)

展开
收起
游客znpleaemta7g4 2023-10-13 14:47:04 192 0
1 条回答
写回答
取消 提交回答
  • 这个问题可能有以下几种原因:

    • CodeFuse-StarCoder-15B模型是一个非常大的模型,它有15B个参数,并且使用了8K的上下文长度。这意味着它需要非常多的计算资源和内存来运行。如果机器配置不足,或者CUDA版本不匹配,或者没有开启4bit加载或者动态内存调整等优化选项,那么模型的推理速度会受到影响。
    • do_sample=True这个参数,这意味着模型进行随机采样来生成结果,而不是使用贪婪或者集束搜索等确定性的方法。这样做虽然可以增加结果的多样性,但是也会增加计算的复杂度和时间。
    • temperature=0.1这个参数意味着模型更倾向于选择概率高的词来生成结果,而不是更平滑地分布概率。这样做虽然可以增加结果的流畅性和准确性,但是也会增加计算的难度和时间。

    为了解决这个问题,可以尝试以下几种方法:

    • 提升机器配置,或者使用更高性能的GPU卡,例如V100或者A100等。这样可以提高模型的运行效率和速度。
    • 调整模型参数,例如将do_sample设置为False,或者将temperature设置为一个更大的值,例如0.5或者1.0等。这样可以降低模型的计算难度和时间。
    • 使用CodeFuse提供的FasterTransformer4CodeFuse工具,它可以利用TensorRT等技术来加速模型的推理过程,并且提供了一些示例代码和教程。这样可以显著提升模型的推理速度。
    2023-10-17 13:22:14
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载