You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Colab运行AI绘画生成器遇RuntimeError:索引设备不匹配

解决accelerate.notebook_launcher运行时的设备不匹配错误

你遇到的错误是因为张量索引(timesteps)与被索引的张量(scheduler.alphas_cumprod)不在同一设备上,导致无法完成索引操作。以下是针对性的解决方案:

1. 统一所有模型与核心张量的设备

在你的training_function内部,添加设备统一逻辑,确保所有组件都运行在Colab的GPU(CUDA)上:

import torch

def training_function(text_encoder, vae, unet):
    # 确定可用设备
    device = "cuda" if torch.cuda.is_available() else "cpu"
    
    # 移动模型到目标设备
    text_encoder.to(device)
    vae.to(device)
    unet.to(device)
    
    # 移动调度器的核心张量到目标设备
    scheduler.alphas_cumprod = scheduler.alphas_cumprod.to(device)
    
    # 确保训练过程中生成的timesteps、noise等张量也在同一设备
    # 示例:生成timesteps后立即移动
    timesteps = torch.randint(0, scheduler.config.num_train_timesteps, (batch_size,), device=device)
    noise = torch.randn_like(original_samples).to(device)
    
    # 后续训练逻辑...

2. 显式配置accelerate.notebook_launcher的进程与设备

由于Colab通常单GPU运行,显式指定进程数为1,避免多进程导致的设备混乱:

accelerate.notebook_launcher(training_function, args=(text_encoder, vae, unet), num_processes=1)

或者提前用Accelerator组件统一准备模型,确保设备对齐:

from accelerate import Accelerator

# 初始化加速器并准备模型
accelerator = Accelerator()
text_encoder, vae, unet = accelerator.prepare(text_encoder, vae, unet)

# 再传入launcher运行
accelerate.notebook_launcher(training_function, args=(text_encoder, vae, unet))

3. 排查训练函数内的张量创建点

检查training_function中所有手动创建的张量(如timesteps、噪声张量),避免在CPU上创建后未移动到GPU。所有需要与模型交互的张量,都要确保调用.to(device)方法。

内容的提问来源于stack exchange,提问作者Neil Malhotra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:01:17