修改容器的 sharememory

2021-10-11 19:08:13 字數 1113 閱讀 1595

今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....