Python 环境管理指南¶
概述¶
为解决 DeepExtension 所支持模型种类繁杂导致的训练代码差异性问题,最新版本已支持使用 Conda 实现 Python 环境隔离。
本文档说明如何在系统中创建和使用新的 Conda 环境。
创建新环境¶
1. 进入 Python 容器¶
首先进入正在运行的 Docker 容器:
docker exec -it deepE-training-prod bash
2. 初始化 Conda(如需要)¶
进入容器后可能会遇到以下两种情况:
-
情况 1:Conda 未初始化。命令行提示符前没有
(base)环境标识。 请执行以下命令初始化 Conda 并重新进入容器:conda init exit docker exec -it deepE-training-prod bash -
情况 2:Conda 已初始化。命令行提示符通常显示
(base)前缀,可直接进行下一步操作。
3. 创建 Conda 环境¶
使用 conda create 命令创建新的隔离环境。请指定所需的环境名称(env_name)和 Python 版本。
conda create -n <环境名称> python=<版本号> -y
conda create -n my_training_env python=3.9 -y
4. 安装依赖包¶
可通过以下两种主要方法在新环境中安装依赖:
方法 1:通过 requirements.txt 文件安装
conda activate <环境名称>
pip install -r requirements.txt
方法 2:通过本地包目录安装
在机器A上执行以下操作:
# 进入训练容器
docker exec -it deepE-training-prod
# 激活目标环境
conda activate <环境名称>
# 安装conda-pack工具
conda install -c conda-forge conda-pack
# 打包当前环境(在容器内执行)
conda pack -n <环境名称> -o <环境名称>.tar.gz
传输打包文件:
- 将生成的 <环境名称>.tar.gz 文件从机器A传输到机器B
在机器B上执行以下操作:
# 进入项目目录,创建环境目录
mkdir -p ./conda/envs/<环境名称>
# 进入目标目录
cd ./conda/envs/<环境名称>
# 解压环境包
tar -xzf <环境名称>.tar.gz
# 进入训练容器
docker exec -it deepE-training-prod
# 运行conda-unpack修复路径(重要!)
source /opt/conda/envs/<环境名称>/bin/conda-unpack
# 清理临时文件(可选)
rm /opt/conda/envs/<环境名称>/bin/conda-unpack
注意事项:
- 请将 <环境名称> 替换为实际的conda环境名称
- 确保机器B的目录结构与机器A保持一致
- conda-unpack步骤必须执行,以修复环境中的硬编码路径
环境配置案例¶
Qwen3模型训练环境配置¶
对于Qwen3模型的训练,我们提供了一个预配置的环境依赖文件。您可以通过以下步骤快速创建可用的训练环境:
步骤 1:创建环境
conda create -n transformer_env python=3.10 -y
conda activate transformer_env
步骤 2:安装依赖
将以下内容保存为 requirements_qwen25.txt 文件:
name: transformer_env
channels:
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1=main
- _openmp_mutex=5.1=1_gnu
- bzip2=1.0.8=h5eee18b_6
- ca-certificates=2025.10.5=hbd8a1cb_0
- conda-pack=0.8.1=pyhd8ed1ab_1
- expat=2.7.1=h6a678d5_0
- ld_impl_linux-64=2.44=h153f514_2
- libffi=3.4.4=h6a678d5_1
- libgcc=15.2.0=h767d61c_7
- libgcc-ng=15.2.0=h69a702a_7
- libgomp=15.2.0=h767d61c_7
- libnsl=2.0.0=h5eee18b_0
- libstdcxx-ng=11.2.0=h1234567_1
- libuuid=1.41.5=h5eee18b_0
- libxcb=1.17.0=h9b100fa_0
- libzlib=1.3.1=hb25bd0a_0
- ncurses=6.5=h7934f7d_0
- openssl=3.5.4=h26f9b46_0
- pip=25.2=pyhc872135_1
- pthread-stubs=0.3=h0ce48e5_1
- python=3.10.19=h6fa692b_0
- readline=8.3=hc2a1206_0
- setuptools=80.9.0=py310h06a4308_0
- sqlite=3.50.2=hb25bd0a_1
- tk=8.6.15=h54e0aa7_0
- wheel=0.45.1=py310h06a4308_0
- xorg-libx11=1.8.12=h9b100fa_1
- xorg-libxau=1.0.12=h9b100fa_0
- xorg-libxdmcp=1.1.5=h9b100fa_0
- xorg-xorgproto=2024.1=h5eee18b_1
- xz=5.6.4=h5eee18b_1
- zlib=1.3.1=hb25bd0a_0
- pip:
- accelerate==1.8.1
- aiohappyeyeballs==2.6.1
- aiohttp==3.13.2
- aiosignal==1.4.0
- annotated-doc==0.0.3
- annotated-types==0.7.0
- anyio==4.11.0
- astor==0.8.1
- async-timeout==5.0.1
- attrs==25.4.0
- bitsandbytes==0.48.2
- blake3==1.0.8
- blinker==1.9.0
- cachetools==6.2.1
- cbor2==5.7.1
- certifi==2025.10.5
- cffi==2.0.0
- charset-normalizer==3.4.4
- click==8.2.1
- cloudpickle==3.1.1
- compressed-tensors==0.11.0
- cupy-cuda12x==13.6.0
- cut-cross-entropy==25.1.1
- datasets==4.3.0
- depyf==0.19.0
- diffusers==0.35.2
- dill==0.4.0
- diskcache==5.6.3
- distro==1.9.0
- dnspython==2.8.0
- docstring-parser==0.17.0
- einops==0.8.1
- email-validator==2.3.0
- exceptiongroup==1.3.0
- fastapi==0.120.4
- fastapi-cli==0.0.14
- fastapi-cloud-cli==0.3.1
- fastrlock==0.8.3
- filelock==3.20.0
- flask==3.1.2
- frozendict==2.4.6
- frozenlist==1.8.0
- fsspec==2025.9.0
- gguf==0.17.1
- h11==0.16.0
- hf-transfer==0.1.9
- hf-xet==1.2.0
- httpcore==1.0.9
- httptools==0.7.1
- httpx==0.28.1
- huggingface-hub==0.36.0
- idna==3.11
- importlib-metadata==8.7.0
- interegular==0.3.3
- itsdangerous==2.2.0
- jinja2==3.1.6
- jiter==0.11.1
- jsonschema==4.25.1
- jsonschema-specifications==2025.9.1
- lark==1.2.2
- llguidance==0.7.30
- llvmlite==0.44.0
- lm-format-enforcer==0.11.3
- markdown-it-py==4.0.0
- markupsafe==3.0.3
- mdurl==0.1.2
- mistral-common==1.8.5
- mpmath==1.3.0
- msgpack==1.1.2
- msgspec==0.19.0
- multidict==6.7.0
- multiprocess==0.70.16
- networkx==3.4.2
- ninja==1.13.0
- numba==0.61.2
- numpy==2.2.6
- nvidia-cublas-cu12==12.8.4.1
- nvidia-cuda-cupti-cu12==12.8.90
- nvidia-cuda-nvrtc-cu12==12.8.93
- nvidia-cuda-runtime-cu12==12.8.90
- nvidia-cudnn-cu12==9.10.2.21
- nvidia-cufft-cu12==11.3.3.83
- nvidia-cufile-cu12==1.13.1.3
- nvidia-curand-cu12==10.3.9.90
- nvidia-cusolver-cu12==11.7.3.90
- nvidia-cusparse-cu12==12.5.8.93
- nvidia-cusparselt-cu12==0.7.1
- nvidia-nccl-cu12==2.27.3
- nvidia-nvjitlink-cu12==12.8.93
- nvidia-nvshmem-cu12==3.3.20
- nvidia-nvtx-cu12==12.8.90
- openai==2.6.1
- openai-harmony==0.0.4
- opencv-python-headless==4.12.0.88
- outlines-core==0.2.11
- packaging==25.0
- pandas==2.3.3
- partial-json-parser==0.2.1.1.post6
- peft==0.17.1
- pillow==12.0.0
- prometheus-client==0.23.1
- prometheus-fastapi-instrumentator==7.1.0
- propcache==0.4.1
- protobuf==6.33.0
- psutil==7.1.3
- py-cpuinfo==9.0.0
- pyarrow==22.0.0
- pybase64==1.4.2
- pycountry==24.6.1
- pycparser==2.23
- pydantic==2.12.3
- pydantic-core==2.41.4
- pydantic-extra-types==2.10.6
- pygments==2.19.2
- python-dateutil==2.9.0.post0
- python-dotenv==1.2.1
- python-json-logger==4.0.0
- python-multipart==0.0.20
- pytz==2025.2
- pyyaml==6.0.3
- pyzmq==27.1.0
- ray==2.51.1
- referencing==0.37.0
- regex==2025.10.23
- requests==2.32.5
- rich==14.2.0
- rich-toolkit==0.15.1
- rignore==0.7.3
- rpds-py==0.28.0
- safetensors==0.6.2
- scipy==1.15.3
- sentencepiece==0.2.1
- sentry-sdk==2.43.0
- setproctitle==1.3.7
- shellingham==1.5.4
- shtab==1.7.2
- six==1.17.0
- sniffio==1.3.1
- soundfile==0.13.1
- soxr==1.0.0
- starlette==0.49.3
- sympy==1.14.0
- tiktoken==0.12.0
- tokenizers==0.22.1
- torch==2.8.0
- torchao==0.14.1
- torchaudio==2.8.0
- torchvision==0.23.0
- tqdm==4.67.1
- transformers==4.57.1
- triton==3.4.0
- trl==0.23.0
- typeguard==4.4.4
- typer==0.20.0
- typing-extensions==4.15.0
- typing-inspection==0.4.2
- tyro==0.9.35
- tzdata==2025.2
- unsloth==2025.10.12
- unsloth-zoo==2025.10.13
- urllib3==2.5.0
- uvicorn==0.38.0
- uvloop==0.22.1
- vllm==0.11.0
- watchfiles==1.1.1
- websockets==15.0.1
- werkzeug==3.1.3
- xformers==0.0.32.post1
- xgrammar==0.1.25
- xxhash==3.6.0
- yarl==1.22.0
- zipp==3.23.0
prefix: /opt/conda/envs/transformer_env
然后安装依赖:
pip install -r requirements_qwen25.txt
步骤 3:验证安装
# 验证关键包版本
python -c "import torch; print(f'PyTorch: {torch.__version__}'); import transformers; print(f'Transformers: {transformers.__version__}'); import peft; print(f'PEFT: {peft.__version__}')"
步骤 4:导出环境(可选) 如果需要将环境迁移到其他机器,可以使用 conda-pack 打包:
conda install -c conda-forge conda-pack
conda pack -n qwen25_training -o qwen25_training.tar.gz
使用环境¶
环境创建完成后,即可在训练任务中指定使用。请在训练方法配置中找到 conda_env 字段,并填入您创建的环境名称(例如:my_training_env 或 transformer_env)。
关于训练方法配置的详细说明,请参阅 训练配置文档。