🐳 AI/Data workload essentiële instellingen: Docker gedeeld geheugen (shm_size en ipc) volledig begrijpen
Als je onbekende fouten zoals OSError: No space left on device hebt ervaren bij AI- en grote data-verwerkingsworkloads, is dat meestal omdat de instelling van het gedeeld geheugen van de Docker-container (shm_size) ontoereikend is.
Deze post legt duidelijk uit waarom gedeeld geheugen belangrijk is in een containeromgeving en hoe je de shm_size en ipc: host opties correct kunt instellen.
1. De rol en het belang van shm_size
Rol: Bepalen van de grootte van het gedeelde geheugen van de container
shm_size is de optie om de maximale grootte van het /dev/shm (POSIX gedeeld geheugen) bestandssysteem binnen de container in te stellen.
-
De standaardwaarde van Docker is 64 MB, wat zeer klein is.
-
Let op:
/dev/shmgebruikt host RAM alstmpfs(tijdelijk bestandssysteem) en is niet gerelateerd aan VRAM (GPU-geheugen).
Waarom is het belangrijk?
AI/data-verwerkingstaken maken essentieel gebruik van dit gedeeld geheugen bij het uitwisselen van grote hoeveelheden data tussen processen.
-
PyTorch DataLoader: Wanneer
num_workers > 0is ingesteld, worden tensors/batches via gedeeld geheugen tussen werkprocessen doorgegeven. Als deze ruimte tekortschiet, kan deOSError: No space left on devicefout optreden. -
TensorRT engine build/serving: Grote tussenliggende artefacten of IPC-buffers gebruiken veel gedeeld geheugen. Bij gebrek aan ruimte kunnen engine build-fouten of segmentatiefouten optreden.
-
Multiprocessing en IPC-communicatie: Essentieel voor het delen van grote arrays/buffers tussen processen in NCCL, OpenCV, NumPy, enz.
2. ipc-instellingen: Isolatiegraad van gedeeld geheugen
IPC (Inter-Process Communication) namespace is de Docker-optie die bepaalt hoe het communicatiegebied (gedeeld geheugen, semaforen, enz.) tussen de processen van de container geïsoleerd moet worden.
| ipc-instelling | Werking | Bepaling van de grootte van /dev/shm |
|---|---|---|
| Standaard (vermist) | Container gebruikt eigen IPC-namespaces (geïsoleerd) | Grootte zoals bepaald door shm_size (standaardwaarde 64MB) |
ipc: host |
Container deelt de IPC-namespace van de host | Grootte van de /dev/shm van de host (meestal de helft van het RAM) |
ipc: container:<ID> |
Deelt IPC met een andere gespecificeerde container | Afhankelijk van de instelling van de te delen container |
3. Werking van het gelijktijdig gebruik van shm_size en ipc: host (voorbeeldanalyse)
Bij AI/LLM-taken is het gebruikelijk om shm_size: "16g" en ipc: host samen in te stellen. We leren welke instellingen van toepassing zijn aan de hand van een praktisch voorbeeld.
Voorbeeld: Instellingen en resultaatanalyse
| Docker Compose instellingssnipped | Resultaat in de container voor df -h /dev/shm |
|---|---|
| shm_size: "16g" ipc: host |
Bestandssysteem tmpfs Grootte 60G Gebruikt 8.3M Beschikbaar 60G Gebruik% 1% Gemonteerd op /dev/shm |
Conclusie: ipc: host negeert shm_size.
-
Als
ipc: hostis ingesteld: De container gebruikt de IPC-namespace van de host. -
shm_size: "16g"wordt genegeerd: Deze optie is alleen relevant wanneer de eigen IPC-namespace wordt gebruikt. -
Bron van de 60G: Host Linux-systemen stellen
/dev/shmvaak standaard in op ongeveer de helft van het totale RAM. Daarom ziet de container in het bovenstaande voorbeeld de helft van de 120G van de host, wat 60G is.
Kernsamenvatting
Wanneer
ipc: hostis ingesteld, gebruikt de container de gedeelde geheugenspatie van de host, waardoor deshm_sizeinstelling feitelijk niet wordt toegepast.
4. Aanbevolen bedrijfspraktijken en geheugenlimieten beheren
💡 Praktische aanbevolen opties
-
✅ Stabiliteit voorop (aanbevolen): houd
ipc: hostaan-
Instelling: Houd alleen
ipc: hostaan (of kan ook samen metshm_sizeworden ingesteld) -
Resultaat: Maakt gebruik van de ruime grootte van
/dev/shmvan de host (bijv. 60G). -
Voordeel: Voorkomt grondig de fouten van onvoldoende gedeeld geheugen bij de meeste AI/data-taken en is het meest stabiel. 60G is slechts de maximale waarde; alleen de werkelijke gebruiksgegevens bezetten RAM, dus als er geen geheugenbeperkingen zijn, is het prettig om het zo te laten.
-
-
✅ Dwing per container limiet af: verwijder
ipc: host-
Instelling: Verwijder
ipc: hosten specificeershm_size: "8g"of"16g" -
Resultaat: Er wordt een 16GB
/dev/shmspecifiek voor de container aangemaakt. -
Voordeel: Helpt om de gebruikslimieten van gedeeld geheugen voor elke container gedurende het draaien van verschillende containers duidelijk te beperken, wat gunstig is voor de bescherming en isolatie van het RAM van de host.
-
⚙️ Hoe de grootte van de host /dev/shm aan te passen (bij optie 1 gebruik)
Als je de grootte van de host /dev/shm wilt wijzigen terwijl je ipc: host gebruikt, moet je de tmpfs instellingen aanpassen.
- Tijdelijk de grootte wijzigen (herstart herstelt):
sudo mount -o remount,size=16G /dev/shm
(Wordt onmiddellijk toegepast op alle processen/containers.)
- Permanente wijziging van de grootte (
/etc/fstabaanpassen):
# Voeg de volgende regel toe/bewerk in /etc/fstab
tmpfs /dev/shm tmpfs defaults,size=16G 0 0
Sla op en herstart of gebruik bovenstaande `remount` opdracht om onmiddellijk toe te passen.
Wanneer moet je dit vergroten? Wanneer er veel DataLoader-werkers zijn of wanneer je sporadisch de
No space left on devicefout krijgt tijdens het bouwen van een TensorRT-engine, moet je deshm_sizeof de grootte van het host/dev/shmtot minimaal 8G of meer aanpassen.
댓글이 없습니다.