今docker容器內部執行pytorch訓練指令碼時,遇到
error: unexpected bus error encountered in worker. this might be caused by insufficient shared memory (shm)的報錯。
pytorch使用共享記憶體在程序之間共享資料,因此如果使用torch多執行緒資料引導程式(比如我將dataloader
裡的num_workers
設定為2),容器執行時使用的預設共享記憶體段大小是不夠的.
查閱資料後,有兩種解決方案。
方法一、重新建立乙個容器,建立的時候設定一下 shm的大小。
nvidia-docker run -t -d -v /掛載路徑/:/m容器路徑/ --shm-size 8g -it 映象id bash
然後進入容器,檢視 shm的大小,而修改前只有65536k
重新進入容器,執行訓練指令碼,
方法二、不想建立乙個新的容器,那麼可以考慮修改已有容器shm的大小
見部落格docker-修改container的shmsize(shm)共享記憶體修改 方法
三、修改dataloader中引數num_workers的值
dataloader = torch.utils.data.dataloader(
dataset,
batch_size=8,
shuffle=
true
, num_workers=0,
pin_memory=
true
, collate_fn=dataset.collate_fn
)
參考資料:
error: unexpected bus error encountered in worker. this might be caused by insufficient shared memo
docker-修改container的shmsize(shm)共享記憶體修改
Linux docker 修改容器埠
注 本操作將停止執行所有 docker 容器 1.停止 docker 服務 systemctl stop docker 2.開啟容器配置,找到 portbindings 的 hostport 並修改 vi var lib docker containers container id hostconf...
docker修改容器內的配置
docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的映象中,然後發布到任何流行的 linux或windows 機器上,也可以實現虛擬化。大白話就是,拉取乙個軟體的映象,可以同時在一台機器上安裝幾個軟體,每個軟體在不同的容器中執行,互不干擾。基本命令 system...
docker 修改容器的掛載目錄
掛載了一塊新硬碟,所以增加一下自己容器裡掛載的路徑。參考1 參考2 選擇了最簡單的方案 1 記錄docker的container id的 2 記錄完整的容器的hash值 ls var lib docker containers 3 停止docker 服務 systemctl stop docker....