各位大大好@@
小弟第一次使用PyTorch進行多卡訓練....
目前手上有四張卡但是實際執行起來只有一張在動...其餘待機
使用的是 https://github.com/tianrun-chen/SAM-Adapter-PyTorch 中的 Train指令
其中只有針對 config中的檔案路徑做了修改....
git提供的指令 :
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch train.py --nnodes 1 --nproc_per_node 4 --config [CONFIG_PATH]
(我只是將config_path換成修改後的config.yaml的位置)
查閱了torch的official documents也沒頭緒怎麼解決...
似乎是因為 train.py
內的 device_ids
預設值被設定成 -1
的關係
model = torch.nn.parallel.DistributedDataParallel(
model,
device_ids=[args.local_rank],
output_device=args.local_rank,
find_unused_parameters=True,
broadcast_buffers=False
)
train.py
最底下有
parser.add_argument("--local_rank", type=int, default=-1, help="")
這行把args.local_rank
設定成default=-1
,但根據DistributedDataParallel官方文件對device_ids
的說明,要使用到全部 GPU 必須設定成None
才行(這段可能有錯,不太理解multi-device modules and CPU modules
是什麼意思),或是你要為train.py
加上--local_rank
參數,使其為一個清單才行,我猜可能的值為--local_rank '0,1,2,3'
,不過這樣也要把output_device
的值改掉才可以
我沒多個GPU,以上只是看原始碼猜的,還要麻煩你試驗了