DeepSpeed-MII 停止序列

g6ll5ycj  于 6个月前  发布在  其他
关注(0)|答案(4)|浏览(130)

你好,Deepspeed-MII团队,
我想知道在ds-mii中是否有实现停止序列或停止令牌的方法,以便提前停止生成。
在当前实现中,模型主要生成max_new_tokens个令牌。在Huggingface的transformers中,可以实现custom stopping criteria,但在这里我没有找到这个选项。
我尝试将eos_token_id设置为所需的停止令牌,但不知何故,即使产生停止令牌后,模型仍然会继续生成。
祝好,V

af7jpaap

af7jpaap1#

你好,@volkerha,这在MII中目前是不可能的。一般来说,任何额外的kwargs传递给query()都会传递给transformers.pipeline对象。例如:

pipeline_kwargs = {"max_new_tokens": 50, "batch_size": 2}
result = generator.query({'query': ["DeepSpeed is the", "Seattle is"]}, **pipeline_kwargs)

问题是我们当前的部署类型使用了一个grpc服务器,而这些pipeline_kwargs值必须被序列化。目前我们只支持intfloatstrbool这些值。我看到了几个前进的方向:

  1. 我们引入一个不依赖于grpc的部署类型(这是我们现在待办事项列表上的事情)
  2. 我们扩展序列化能力(这很好,因为即使部署使用了grpc,它也能解决这个问题)
  3. 我们添加一个自定义API,该API将根据用户输入生成停止条件,并将其传递给管道(这可能是最脆弱且难以维护的选项)
    在你目前的MII使用中,你是否需要GRPC服务器功能?或者一个非GRPC部署对你来说是否可行?我认为(1)最有可能在不久的将来实现。
dpiehjr4

dpiehjr42#

看起来有一个stop_sequence(尽管仅限于一个令牌)。huggingface/transformers#18444
我正在考虑向hugging face提交一个PR,以便在生成管道中添加一个参数来指定停止标记(这样我们就不必在周围传递对象了)。

0vvn1miw

0vvn1miw3#

正如您提到的,🤗transformers将eos_token_id设置为stop_sequence的第一个标记。我们可以直接将eos_token_id传递给generate(...),因此收益不大。
在我的案例中,我希望指定一系列标记作为停止标准,例如,只有当模型生成类似"User:"的内容时,生成过程才应停止。此外,保留原始的eos_token会更好。

okxuctiv

okxuctiv4#

这个PR已合并:huggingface/transformers#20727
一旦发布,我们应该能够做model.generate(..., eos_token_id=[1, 2])
它没有使用stopping_criteria,因为看起来jax和tf代码不使用它们,而且beam search也不能与stopping_criteria一起工作。

相关问题