Python не может запускать многопроцессорную обработку в контейнере [закрыто]Python

Программы на Python
Ответить
Anonymous
 Python не может запускать многопроцессорную обработку в контейнере [закрыто]

Сообщение Anonymous »

В настоящее время при переносе программы Python 3.12 из локальной среды в контейнерную среду, пока она запускается и выполняет свою задачу локально, происходит сбой в Docker на ранних этапах запуска.

Код: Выделить всё

/home/app/.../.venv/lib/python3.12/site-packages/nvidia_smi.py:810: SyntaxWarning: invalid escape sequence '\A'
mem = 'N\A'
/home/app/.../.venv/lib/python3.12/site-packages/nvidia_smi.py:831: SyntaxWarning: invalid escape sequence '\A'
maxMemoryUsage = 'N\A'
/home/app/.../run.py:2: MovedIn20Warning: The ``declarative_base()`` function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
from ... import main
25.10.2-8-g51a92b3-dirty
[2025/11/26 12:38:36.285] | [  INFO] | Running scenario: ... | ID=796395118d801c8b2bd1c91730121205 SimulationTime=240.00[s]
[2025/11/26 12:38:37.312] | [  INFO] | child process calling self.run()


Exception ignored in: 
Traceback (most recent call last):
File "... .py", line 19392, in ... .CTrackingLoopFB.__del__
AttributeError: 'CTrackingLoopFB' object has no attribute 'mFile'
Exception ignored in: 
Traceback (most recent call last):
File "/root/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/lib/python3.12/multiprocessing/shared_memory.py", line 187, in __del__
self.close()
File "/root/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/lib/python3.12/multiprocessing/shared_memory.py", line 230, in close
self._mmap.close()
BufferError: cannot close exported pointers exist
Exception ignored in: 
Traceback (most recent call last):
File "/root/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/lib/python3.12/multiprocessing/shared_memory.py", line 187, in __del__
self.close()
File "/root/.local/share/uv/python/cpython-3.12.12-linux-x86_64-gnu/lib/python3.12/multiprocessing/shared_memory.py", line 230, in close
self._mmap.close()
BufferError: cannot close exported pointers exist
Я проверил /dev/shm на локальном компьютере, и ожидаемое использование составляет ~ 4 ГБ, в то время как в контейнерах он постоянно использует только 60 МБ, прежде чем произойдет сбой/остановка, при этом остается больше свободного места.
Я запускаю контейнер с помощью docker run --gpus all --runtime=nvidia --shm-size=10Gb uv run.py .

Код: Выделить всё

FROM nvidia/cuda:13.0.2-cudnn-devel-ubuntu24.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
sudo \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

### Fetch uv from image repository
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

WORKDIR /home/app/aplication
COPY . .

RUN uv venv --python 3.12
ENV VIRTUAL_ENV=/home/app/xrc_core/.venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN uv pip install -r python312_packages.txt
Используются пакеты расширений C, такие как cython, greenlet, fastrlock.
К сожалению, я не могу предоставить исходный код, но он работает предварительно скомпилированный в контейнере.
ИСПРАВЛЕНИЕ: добавление флага --ulimit nofile=: помогло, я обнаружил это, запустив более старую версию под управлением Python 3.10 и сообщения об ошибках стали более четкими (упоминание слишком большого количества открытых файлов), это вместе с --shm-size= разблокирует Python для полного использования общей памяти и ресурсов во время многопроцессорной обработки.
Фрагмент кода не требуется, поскольку целостность исходного кода не подвергается сомнению, он требует многопоточности и ресурсов, поэтому необходима специальная разблокировка ресурсов.

Подробнее здесь: https://stackoverflow.com/questions/798 ... tainerized
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»