mlc-llm [问题]使用多个流进行并行计算?

l3zydbqr  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(47)

❓ 一般性问题

你好,在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是否可以并行化独立的计算(不考虑上述代码的性能)。
waxmsbnn

waxmsbnn1#

这是一个好问题,虽然可能存在这种可能性,但是phi是一个小型模型,因此影响可能不太明显。目前我们还没有尝试使用多流,但更新编译器以启用手动流规范是可能的。

相关问题