[object Object]

← back to Exo

fix isinstance for qwen3Moe (#1595)

0ff99a2c40c29ca30738adcece7699b645e7816d · 2026-02-23 15:39:13 +0000 · Evan Quiney

we were checking if qwen3 had a transformers Qwen3DecoderLayer rather
than an mlx Qwen3MoeDecoderLayer causing an assertion error on loading
qwen models - this corrects it to the actual layer type

Files touched

Diff

commit 0ff99a2c40c29ca30738adcece7699b645e7816d
Author: Evan Quiney <evanev7@gmail.com>
Date:   Mon Feb 23 15:39:13 2026 +0000

    fix isinstance for qwen3Moe (#1595)
    
    we were checking if qwen3 had a transformers Qwen3DecoderLayer rather
    than an mlx Qwen3MoeDecoderLayer causing an assertion error on loading
    qwen models - this corrects it to the actual layer type
---
 src/exo/worker/engines/mlx/auto_parallel.py | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/exo/worker/engines/mlx/auto_parallel.py b/src/exo/worker/engines/mlx/auto_parallel.py
index 6a949e6b..f2490006 100644
--- a/src/exo/worker/engines/mlx/auto_parallel.py
+++ b/src/exo/worker/engines/mlx/auto_parallel.py
@@ -32,13 +32,12 @@ from mlx_lm.models.minimax import MiniMaxAttention
 from mlx_lm.models.minimax import Model as MiniMaxModel
 from mlx_lm.models.ministral3 import Model as Ministral3Model
 from mlx_lm.models.qwen3_moe import Model as Qwen3MoeModel
-from mlx_lm.models.qwen3_moe import Qwen3MoeSparseMoeBlock
+from mlx_lm.models.qwen3_moe import Qwen3MoeDecoderLayer, Qwen3MoeSparseMoeBlock
 from mlx_lm.models.qwen3_next import Model as Qwen3NextModel
 from mlx_lm.models.qwen3_next import Qwen3NextDecoderLayer, Qwen3NextSparseMoeBlock
 from mlx_lm.models.step3p5 import Model as Step35Model
 from mlx_lm.models.step3p5 import Step3p5MLP as Step35MLP
 from mlx_lm.models.step3p5 import Step3p5Model as Step35InnerModel
-from transformers.models.qwen3.modeling_qwen3 import Qwen3DecoderLayer
 
 from exo.shared.logging import logger
 from exo.shared.types.worker.shards import PipelineShardMetadata
@@ -840,7 +839,7 @@ class QwenShardingStrategy(TensorParallelShardingStrategy):
         for i, layer in enumerate(model.layers):
             eval_with_timeout(layer.parameters(), timeout_seconds / total, on_timeout)
             # Shard the self attention
-            if isinstance(layer, Qwen3DecoderLayer):
+            if isinstance(layer, Qwen3MoeDecoderLayer):
                 layer.self_attn.q_proj = self.all_to_sharded_linear(
                     layer.self_attn.q_proj
                 )

← fbb80e1c Address ring slowdown by turning on FAST SYNCH (#1594)  ·  back to Exo  ·  add lazy task group (#1569) 61d2a2b6 →