MetaX-Tech Developer Forum 论坛首页
  • 沐曦开发者
search
Sign in

avaarg

  • Members
  • Joined 2025年10月6日
  • message 帖子
  • forum 主题
  • favorite 关注者
  • favorite_border Follows
  • person_outline 详细信息

avaarg has posted 3 messages.

  • See post chevron_right
    avaarg
    Members
    MACA 环境下 torchrun 端口绑定问题报告 解决中 2025年12月5日 15:19

    MACA 环境下 torchrun 端口绑定问题报告

    环境信息

    | 组件 | 版本/信息 |
    | --------- | ------------------------------------------------------------ |
    | 基础镜像 | cr.metax-tech.com/public-ai-release/maca/deepspeed:0.16.5-maca.ai3.2.1.5-torch2.6-py312-ubuntu22.04-amd64 |
    | MACA 版本 | 3.2.1 (/opt/maca-3.2.1) |
    | PyTorch | 2.6 |
    | Python | 3.12 |
    | DeepSpeed | 0.16.5 |
    | 硬件 | 8x MetaX MXC500 GPU (64GB each) |
    | 操作系统 | Ubuntu 22.04 |

    问题描述

    在 Docker 容器中使用 torchrun 启动多 GPU 分布式训练时,所有 worker 进程在 rendezvous 阶段报告 EADDRINUSE 错误,即使指定的端口实际上并未被占用。

    复现步骤

    1. 启动 Docker 容器(使用 --network host 或默认桥接网络均可复现)
    2. 运行以下命令启动 8-GPU 训练:
    torchrun --nproc_per_node=8 --master_port=29500 \
        -m llamafactory.cli train /tmp/train_config.yaml
    

    错误日志

    RuntimeError: The server socket has failed to listen on any local network address.
        port: 29500
        useIpv6: 0
        code: -98
        name: EADDRINUSE
        message: address already in use
    

    完整堆栈:

    Traceback (most recent call last):
      File "/opt/conda/lib/python3.12/site-packages/torch/distributed/elastic/rendezvous/c10d_rendezvous_backend.py", line 79, in _create_tcp_store
        store = TCPStore(
      ...
    torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
    ============================================================
    llamafactory.cli FAILED
    ------------------------------------------------------------
    Failures:
      <NO_OTHER_FAILURES>
    ------------------------------------------------------------
    Root Cause (first observed failure):
      rank: 5 (local_rank: 5)
      error_file: /tmp/torchelastic_xxx/xxx/attempt_0/5/error.json
      exitcode: 1
      ...
    ============================================================
    

    关键观察

    1. 端口实际未被占用:在宿主机上使用 ss -tlnp | grep 29500 和 lsof -i :29500 均未发现任何进程监听该端口

    2. 多端口测试均失败:尝试了 29500、29600、30028、39500 等多个端口,均报告相同错误

    3. 不同网络模式均失败:

    4. --network host 模式:失败
    5. 默认桥接网络模式:失败

    6. 错误发生在多个 rank:不同运行中,首次失败的 rank 不固定(观察到 rank 1, 2, 5, 6 等)

    7. 对比测试:

    8. ❌ torchrun --nproc_per_node=8 → 失败 (EADDRINUSE)
    9. ✅ FORCE_TORCHRUN=1 llamafactory-cli train → 成功
    10. ✅ 单 GPU 训练 → 成功

    工作绕过方案

    使用 LLaMA-Factory 内置的 FORCE_TORCHRUN 环境变量替代直接调用 torchrun:

    export FORCE_TORCHRUN=1
    export NNODES=1
    export RANK=0
    export MASTER_ADDR=127.0.0.1
    export MASTER_PORT=29500
    llamafactory-cli train /tmp/train_config.yaml
    

    此方式可正常完成 8-GPU 分布式训练。

    可能原因推测

    1. MACA/MXCCL 与 PyTorch TCPStore 的兼容性问题:可能在初始化 NCCL backend 时,MXCCL 驱动层与 TCPStore 的端口绑定逻辑存在冲突

    2. 多进程启动时序问题:torchrun 的 elastic agent 在快速启动多个 worker 时,可能因 MACA 环境的特殊初始化导致端口状态检测异常

    3. Socket 资源释放延迟:MACA 驱动可能导致 socket 资源释放存在延迟,使得后续进程误判端口状态

    建议排查方向

    1. 检查 MXCCL 初始化过程中是否有预占用端口的行为
    2. 对比原生 CUDA 环境下 torchrun 的行为差异
    3. 检查 /opt/maca/lib/libmxccl_21605plugin.so 加载时的网络相关操作
  • See post chevron_right
    avaarg
    Members
    c500推理Qwen3-VL-30B-A3B-Instruct报错 已解决 2025年10月6日 12:19

    调试一通,模型跑起来了,主要问题

    Qwen3-VL 模型在处理图像输入时调用了 3D 卷积(conv3d);
    MetaX 的 MACA runtime 没有找到对应的 CUDA/cuDNN 算法(即不支持这个算子)

    无法正常使用模型

  • See post chevron_right
    avaarg
    Members
    c500推理Qwen3-VL-30B-A3B-Instruct报错 已解决 2025年10月6日 12:12

    使用镜像:cr.metax-tech.com/public-ai-release/maca/modelzoo.llm.vllm:maca.ai3.1.0.7-torch2.6-py310-ubuntu22.04-amd64

    INFO 10-06 11:53:14 [multiproc_worker_utils.py:138] Terminating local vLLM worker processes
    === MXC500 ModelZoo LLM 启动 ===
    当前时间: Mon Oct 6 11:53:24 CST 2025
    工作目录: /workspace
    检查MXC500设备...
    crw-rw---- 1 root video 505, 0 Oct 6 11:53 /dev/mxcd
    激活conda环境...
    检查Python环境...
    /opt/conda/bin/python
    Python 3.10.10
    PyTorch version: 2.6.0+metax3.1.0.4
    vLLM version: 0.10.0

    视觉编码器(Vision Tower)加载过大
    The sequence length (8192) is smaller than the pre-defined worst-case total number of multimodal tokens (16384)
    表示 Qwen3-VL 模型的视觉部分在 profile_run() 阶段创建了 16 K multimodal token 的 dummy 输入,显存暴涨到峰值(≈58 GiB/卡)。
    profile_run() 阶段未跳过 → 全量分配显存
    self.model_runner.profile_run()
    即 vLLM 正在执行假输入推理,没使用你的 VLLM_SKIP_PROFILE=1 优化路径。
    MetaX 驱动 mcModuleLaunchKernel 连锁报错
    mcModuleLaunchKernel: Returned mcErrorInvalidValue
    → 说明底层 device malloc 失败(非 CUDA,而是 MetaX 层的 memory allocator 报错)。

    GPU 推理错误(cuDNN + MXC Runtime)

    关键段:
    [11:53:14.308][MCR][E]mx_device.cpp :9646: Fail to allocate device memory
    RuntimeError: Unable to find a valid cuDNN algorithm to run convolution

    视觉编码器 (Qwen3_VL_MoE.visual) 触发 3D convolution(CLIP-like patch embedding);
    cuDNN(或 MetaX cuDNN shim 层)找不到合适算法;
    同时 MXMACA runtime 报 Fail to allocate device memory;
    导致整个 worker MQLLMEngine 被强制中断。
    注意:这不是 FP8 KV Cache 或文本部分的问题,而是 视觉模块 (Vision Transformer) 初始化阶段。

    在 GPU 上初始化失败,核心报错如下:
    RuntimeError: Unable to find a valid cuDNN algorithm to run convolution
    [11:59:52][MCR][E]mc_runtime_api.cpp :499 : mcModuleLaunchKernel: Returned mcErrorInvalidValue

    Qwen3-VL 模型在处理图像输入时调用了 3D 卷积(conv3d);
    MetaX 的 MACA runtime 没有找到对应的 CUDA/cuDNN 算法(即不支持这个算子);
    导致 GPU 端 kernel 启动失败,返回 mcErrorInvalidValue;
    vLLM 检测不到 cuDNN 算法可用,于是抛出异常并终止整个 engine。

  • 沐曦开发者论坛
powered by misago