❓ 一般性问题
你好,在phi模型中,注意力和MLP模块可以并行执行,因为它们之间没有依赖关系。在下面的代码中,self.mixer和self.mlp可以并行执行。
def forward(self, hidden_states: Tensor, paged_kv_cache: PagedKVCache, layer_id: int):
residual = hidden_states
hidden_states = self.ln(hidden_states)
with tp.shard_bias(self.mixer.out_proj, self.tensor_parallel_shards), tp.shard_bias(
self.mlp.fc2, self.tensor_parallel_shards
):
attn_outputs = self.mixer(hidden_states, paged_kv_cache, layer_id)
feed_forward_hidden_states = self.mlp(hidden_states)
hidden_states = self._apply_parallel_residual(
attn_outputs, feed_forward_hidden_states, residual
)
return hidden_states
问题
- 在上面的代码中,self.mixer和self.mlp是顺序执行的吗?
- 如果是,你知道为什么它是顺序计算(因为性能没有提高)吗?
- 如果是,有没有办法将它们并行化吗?比如使用cuda多流(例如,torch.cuda.Stream,torch.cuda.Event) ...我只是想知道mlc-llm是否可以并行化独立的计算(不考虑上述代码的性能)。
1条答案
按热度按时间waxmsbnn1#
这是一个好问题,虽然可能存在这种可能性,但是phi是一个小型模型,因此影响可能不太明显。目前我们还没有尝试使用多流,但更新编译器以启用手动流规范是可能的。