你好,Deepspeed-MII团队,
我想知道在ds-mii中是否有实现停止序列或停止令牌的方法,以便提前停止生成。
在当前实现中,模型主要生成max_new_tokens
个令牌。在Huggingface的transformers中,可以实现custom stopping criteria,但在这里我没有找到这个选项。
我尝试将eos_token_id
设置为所需的停止令牌,但不知何故,即使产生停止令牌后,模型仍然会继续生成。
祝好,V
你好,Deepspeed-MII团队,
我想知道在ds-mii中是否有实现停止序列或停止令牌的方法,以便提前停止生成。
在当前实现中,模型主要生成max_new_tokens
个令牌。在Huggingface的transformers中,可以实现custom stopping criteria,但在这里我没有找到这个选项。
我尝试将eos_token_id
设置为所需的停止令牌,但不知何故,即使产生停止令牌后,模型仍然会继续生成。
祝好,V
4条答案
按热度按时间af7jpaap1#
你好,@volkerha,这在MII中目前是不可能的。一般来说,任何额外的kwargs传递给
query()
都会传递给transformers.pipeline
对象。例如:问题是我们当前的部署类型使用了一个grpc服务器,而这些
pipeline_kwargs
值必须被序列化。目前我们只支持int
、float
、str
和bool
这些值。我看到了几个前进的方向:在你目前的MII使用中,你是否需要GRPC服务器功能?或者一个非GRPC部署对你来说是否可行?我认为(1)最有可能在不久的将来实现。
dpiehjr42#
看起来有一个
stop_sequence
(尽管仅限于一个令牌)。huggingface/transformers#18444我正在考虑向hugging face提交一个PR,以便在生成管道中添加一个参数来指定停止标记(这样我们就不必在周围传递对象了)。
0vvn1miw3#
正如您提到的,🤗transformers将
eos_token_id
设置为stop_sequence
的第一个标记。我们可以直接将eos_token_id
传递给generate(...)
,因此收益不大。在我的案例中,我希望指定一系列标记作为停止标准,例如,只有当模型生成类似"User:"的内容时,生成过程才应停止。此外,保留原始的
eos_token
会更好。okxuctiv4#
这个PR已合并:huggingface/transformers#20727
一旦发布,我们应该能够做
model.generate(..., eos_token_id=[1, 2])
。它没有使用
stopping_criteria
,因为看起来jax和tf代码不使用它们,而且beam search也不能与stopping_criteria
一起工作。