DeepSpeed-MII num_return_sequences被忽略了,

xv8emn3q  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(82)

我正在使用示例代码进行测试:

import mii
mii_configs = {"tensor_parallel": 1, "dtype": "fp16"}
mii.deploy(task="text-generation",
           model="bigscience/bloom-560m",
           deployment_name="bloom560m_deployment",
           mii_config=mii_configs)

但是在推理过程中,如果我设置 num_return_sequences > 1,这似乎没有任何效果,我总是只得到一个输出。

generator = mii.mii_query_handle("bloom560m_deployment")
result = generator.query({"query": ["DeepSpeed is", "Seattle is"]}, do_sample=True, max_new_tokens=30, num_return_sequences=3)
print(result)
fgw7neuy

fgw7neuy1#

是的,我也遇到了同样的问题,num_return_sequences没有被更改为1,但MII响应只从模型输出中获取第一个。逻辑代码在这里:Link

def text_generation_pack_response_to_proto(response, time_taken, model_time_taken):
    text_responses = []
    for response in response:
        text = response[0]['generated_text']
        text_responses.append(text)

    return modelresponse_pb2.MultiStringReply(response=text_responses,
                                              time_taken=time_taken,
                                              model_time_taken=model_time_taken)

MultiStringReply.response是一个一维数组,被query list使用,因此没有空间容纳num_return_sequences
所以,如果你想得到所有输出,你必须自己更新代码,或者等待别人修复这个bug。
有两种方法可以修复这个bug:

  1. 对于本地使用(一个小技巧),我将所有输出附加到MultiStringReply.response数组。由于所有查询具有相同长度的输出,我们得到了一个'm*n'数组。在客户端,您只需将一维数组更改为二维数组。
  2. 对于最终解决方案,最好更新MultiStringReply定义并更新所有相关代码。

相关问题