每次运行 docker run --rm -v $(pwd)/output:/app/output modelscope-video 都会重新下载大文件(如 3.67GB、5.26GB 等),这确实会浪费时间
优化方案
为了避免重复下载大文件和依赖,您需要持久化模型文件和 Python 环境。以下是具体步骤:
1. 使用 Docker 数据卷或绑定挂载持久化模型文件
modelscope 默认将模型文件下载到容器内的缓存目录(通常是 /root/.cache/modelscope)。您可以将这个目录挂载到主机上,避免每次重新下载。
-
修改 Docker 运行命令: 在主机上创建一个目录用于缓存模型文件,例如 $(pwd)/modelscope_cache:
bash
CollapseWrapRun
Copymkdir -p $(pwd)/modelscope_cache
然后修改 docker run 命令,添加挂载:
bash
CollapseWrapRun
Copydocker run --rm -v $(pwd)/output:/app/output -v $(pwd)/modelscope_cache:/root/.cache/modelscope modelscope-video
这会将模型文件缓存到主机的 modelscope_cache 目录,下次运行时会直接使用缓存的文件。
-
验证缓存: 运行命令后,检查 $(pwd)/modelscope_cache 目录是否包含下载的模型文件。如果有,说明缓存成功。
2. 构建自定义 Docker 镜像
通过构建一个包含所有依赖和模型文件的自定义镜像,可以避免每次运行时的安装和下载。
-
创建 Dockerfile: 在项目目录下创建 Dockerfile:
dockerfile
CollapseWrap
CopyFROM modelscope-video # 安装 sortedcontainers(解决之前的 ModuleNotFoundError) RUN pip install sortedcontainers # 安装其他依赖(如 datasets==2.16.1) RUN pip install datasets==2.16.1 # 预下载模型文件 RUN python -c "from modelscope.pipelines import pipeline; pipeline('text-to-video-synthesis', 'damo/text-to-video-synthesis', device='cpu')" # 设置工作目录 WORKDIR /app
-
构建镜像:
bash
CollapseWrapRun
Copydocker build -t my-modelscope-video .
-
运行容器: 使用新镜像运行:
bash
CollapseWrapRun
Copydocker run --rm -v $(pwd)/output:/app/output my-modelscope-video
这样,所有依赖和模型文件都已预装在镜像中,无需重复下载。
3. 使用 Docker 容器持久化(避免 --rm)
如果不想构建新镜像,可以运行一个持久化容器,安装依赖和下载模型后重复使用。
-
启动容器并保持运行:
bash
CollapseWrapRun
Copydocker run -d --name modelscope-container -v $(pwd)/output:/app/output -v $(pwd)/modelscope_cache:/root/.cache/modelscope modelscope-video tail -f /dev/null
-
安装依赖: 进入容器并安装 sortedcontainers 和其他依赖:
bash
CollapseWrapRun
Copydocker exec -it modelscope-container bash pip install sortedcontainers pip install datasets==2.16.1
-
运行脚本: 在容器内运行您的脚本:
bash
CollapseWrapRun
Copypython text-to-video.py
-
重用容器: 下次直接使用已有容器:
bash
CollapseWrapRun
Copydocker exec -it modelscope-container bash
这样模型文件和依赖会保留,避免重复下载。
4. 使用虚拟环境优化 Python 依赖
为了避免 root 用户警告并提高依赖管理效率,建议在容器内使用虚拟环境。
- 在容器内创建虚拟环境:
bash
CollapseWrapRun
Copydocker run -it --rm -v $(pwd)/output:/app/output -v $(pwd)/modelscope_cache:/root/.cache/modelscope modelscope-video bash python3 -m venv /app/venv source /app/venv/bin/activate pip install sortedcontainers datasets==2.16.1
- 运行脚本:
bash
CollapseWrapRun
Copypython text-to-video.py
- 将虚拟环境挂载到主机: 为持久化虚拟环境,修改运行命令:
bash
CollapseWrapRun
Copydocker run --rm -v $(pwd)/output:/app/output -v $(pwd)/modelscope_cache:/root/.cache/mo
-