Я пытаюсь создать образ Docker с одним и тем же файлом Docker с Python 3.10, CUDA 12.8 и PyTorch 2.8, который можно переносить между двумя компьютерами:
Локальный компьютер: NVIDIA RTX 5070 (архитектура Blackwell, Compute Capability 12.0)
Удаленный компьютер: NVIDIA RTX 3090 (архитектура Ampere, вычислительные возможности 8.6, но nvidia-smi показывает, что установлен CUDA 12.8)
Сначала я попытался переместить большой образ Docker между компьютерами с помощью docker save / docker load, перенесенного через Google Drive. На целевом компьютере загрузка докера постоянно завершается с ошибкой:
Error unpacking image ...: apply layer error: wrong diff id calculated on extraction invalid diffID for layer: expected "...", got "..."
Это всегда происходит на одном и том же большом слое (~6 ГБ).
Пример вывода:
$docker load -i my-saved-image.tar
...
Loading layer 6.012GB/6.012GB
invalid diffID for layer 9: expected sha256:d0d564..., got sha256:55ab5e...
Среда моего удаленного компьютера:
Ubuntu 24.04
Docker Engine (not snap, not rootless)
overlay2 storage driver
Backing filesystem: ext4 (Supports d_type: true)
Docker root: /var/lib/docker
Вывод информации о докере на удаленном компьютере:
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Изображение создано из:
nvidia/cuda:12.8.0-cudnn-devel-ubuntu22.04
PyTorch 2.8 cu128
Python 3.10
и экспортировано с помощью:
docker save my-saved-image:latest -o my-saved-image.tar
Я уже пробовал эти вещи:
- Проверено, что Docker использует overlay2 на ext4
- Сбросить /var/lib/docker
- Убедился, что это не Snap Docker или Docker без root
- Скопировал tar в /tmp и загрузил оттуда
- Подтвердил, что ошибка детерминированная и всегда возникает на одном и том же слое
- docker load читает tar и начинает нормально загружать слои.
- Ошибка возникает только при извлечении большого слоя.
Это обычно вызвано повреждением tar-файла сохранения Docker во время передачи или повреждением чтения диска/файловой системы? Это известная проблема Docker/containerd с большими слоями?
Каков наиболее надежный способ диагностировать, поврежден ли сам tar, хранилище образов Docker или проблема с файловой системой или оборудованием?
Мне также удалось создать образ на своем удаленном компьютере с тем же Dockerfile, и он был успешно собран, но фактический размер образа составляет ~9 ГБ по сравнению с ~18 ГБ, которые я получаю при сборке на моей машине 5070. Я подозреваю, что это имеет какое-то отношение к моей проблеме.
Пример Dockerfile:
# syntax=docker/dockerfile:1
FROM nvidia/cuda:12.8.0-cudnn-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
RUN apt-get update && apt-get install -y --no-install-recommends \
python3.10 python3-pip \
ca-certificates curl \
&& rm -rf /var/lib/apt/lists/* \
&& update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
# PyTorch 2.8 + CUDA 12.8 wheels (cu128)
RUN python -m pip install --upgrade pip \
&& python -m pip install \
torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 \
--index-url https://download.pytorch.org/whl/cu128
CMD ["python", "-c", "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"]
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-cuda-pyt
Мобильная версия