
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Folding@home是一个分布式计算项目,用于模拟蛋白质动态,包括蛋白质折叠过程以及与多种疾病相关的蛋白质运动。它汇聚了志愿在个人计算机上运行蛋白质动态模拟的公民科学家。这些数据带来的见解正帮助科学家更好地理解生物学,并为开发治疗方法提供新机会。
运行Folding@home容器相对直接,但必须特别注意管理工作单元(Work Units)并按时返回。
本文档假设用户熟悉Linux和容器。由于前提条件和设置的复杂性,此容器并非理想的"hello-world"示例——标准的Folding@home Linux客户端运行良好且开销略低。
Folding@home容器类似于需要持久化存储挂载到/fah的数据库容器,且需要谨慎的生命周期管理以避免丢失或浪费工作。config.xml还包含客户端状态,因此必须按此方式管理。
容器基于CUDA 9.2构建以获得更好的兼容性,详情参见:https://docs.nvidia.com/deploy/cuda-compatibility/index.html
本文档以Docker作为示例运行时,但也支持其他运行时。有关Singularity和其他运行时,请阅读其他运行时部分。
以下内容将在下文详细说明,此处列出以确保清晰(遵循RFC 2119规范):
/fah目录。运行中的容器不得共享同一挂载目录,但目录应被重用以避免丢失工作单元。config.xml。--user或等效参数指定容器运行的uid:gid,确保运行中的容器对挂载到/fah的持久化存储具有读写权限。有关设计目标、架构、贡献指南和其他信息,请阅读https://github.com/foldingathome/containers/ 上的README和CONTRIBUTING文档。
容器相关的错误或问题请在GitHub上提交:https://github.com/foldingathome/containers/issues
这些值将在后续的config.xml中使用。
针对NVIDIA GPU
在集群或云上扩展容器之前,必须熟悉/fah存储要求、生命周期和使用方法,以确保完成工作单元并为Folding@home的研究提供帮助。首先从单机器开始。
满足前提条件后,即可运行容器。
参见示例配置文件,确保设置用户/ passkey /团队信息。
bash# 创建持久化存储目录 mkdir $HOME/fah # 根据下方示例配置编辑config.xml,使用vi或其他编辑器 vi $HOME/fah/config.xml
随着时间推移,config.xml将包含客户端状态,并会被客户端重写。
bash# 使用GPU运行容器,命名为"fah0",映射用户和/fah卷 docker run --gpus all --name fah0 -d --user "$(id -u):$(id -g)" \ --volume $HOME/fah:/fah fah-gpu:VERSION
bash# 查看当前运行的输出 docker logs fah0 # 实时查看日志 docker logs -f fah0
bash# 等待工作单元完成后停止容器(推荐),可能需要数小时 docker exec fah0 FAHClient --send-command finish # 检查点后停止容器,通常不超过30秒。 # 确保稍后重新启动以在工作单元过期前完成计算 docker exec fah0 FAHClient --send-command shutdown # 也可以直接终止容器,但不推荐
容器编排工具众多,因此要求尽可能简单:
config.xml应根据主机/VM大小进行调优。/fah目录。这些目录应被重用,但两个容器绝不能使用同一目录。在集群存储上创建根文件夹(例如.../root-dir/),并通过以下方法之一创建子目录:
方法1:对于小型集群,每台主机一个目录较为简单。运行容器时,可将.../root-dir/$hostname/挂载到在hostname上运行的作业的/fah目录。
方法2:对于大型集群,可创建一组可重用的目录,基于运行的客户端数量。运行时需要更仔细的管理,但将.../root-dir/$jobname/挂载到名为fold00...fold99的作业的/fah文件夹是基本思路。
在运行任何客户端之前,确保将自定义的config.xml复制到所有子文件夹。
其他方法只要满足上述要求也同样有效。
根据存储设置,每个子文件夹运行一个容器,将其挂载到/fah。
容器编排工具应提供与docker logs ...和docker exec ...等效的命令以执行相同功能。
bash# 查看所有客户端返回的工作单元数量 grep points .../root-dir/*/log.txt .../root-dir/*/logs/*.txt
集群上停止容器的方式会影响工作单元的延迟或丢失数量。
bash# 推荐的关闭方式 command exec container-id FAHClient --send-command finish # 检查点后停止容器,通常不超过30秒。 command exec container-id FAHClient --send-command shutdown # 也可以直接终止容器,但不推荐
目标是避免累积大量包含未完成工作单元的子目录。
在集群上以低优先级运行Folding@home容器,使其可以被抢占和恢复,这是可行的。max-units配置选项结合低优先级,在无法抢占的情况下可用于利用空闲资源。
在容器中运行客户端时使用的配置选项与独立安装略有不同。以下是关键选项:
所有选项的客户端帮助可通过以下命令获取:
bashdocker run --rm fah-gpu:VERSION --help
1-GPU、1-CPU、16线程示例配置
xml<config> <!-- 设置您的用户、passkey、团队--> <user value="Anonymous"/> <passkey value=""/> <team value="0"/> <power value="full"/> <exit-when-done v='true'/> <web-enable v='false'/> <disable-viz v='true'/> <gui-enabled v='false'/> <!-- 1个GPU插槽 --> <slot id='0' type='GPU'> </slot> <!-- 16-1 = 15 = 3*5用于分解 --> <slot id='1' type='SMP'> <cpus v='15'/> </slot> </config>
8-GPU、2-CPU、80线程示例配置
xml<config> <!-- 设置您的用户、passkey、团队--> <user value="Anonymous"/> <passkey value=""/> <team value="0"/> <power value="full"/> <exit-when-done v='true'/> <web-enable v='false'/> <disable-viz v='true'/> <gui-enabled v='false'/> <!-- 8个GPU插槽 --> <slot id='0' type='GPU'> </slot> <slot id='1' type='GPU'> </slot> <slot id='2' type='GPU'> </slot> <slot id='3' type='GPU'> </slot> <slot id='4' type='GPU'> </slot> <slot id='5' type='GPU'> </slot> <slot id='6' type='GPU'> </slot> <slot id='7' type='GPU'> </slot> <!-- 80-8=72/4=18=2*3*3,以支持NUMA域和分解 --> <slot id='8' type='SMP'> <cpus v='18'/> </slot> <slot id='9' type='SMP'> <cpus v='18'/> </slot> <slot id='10' type='SMP'> <cpus v='18'/> </slot> <slot id='11' type='SMP'> <cpus v='18'/> </slot> </config>
虽然本文档以Docker为重点,但它并非唯一的容器运行时。
完整的Singularity使用指南超出本文档范围。以下命令可帮助熟悉Singularity的用户在单机器上开始使用:
bashmkdir fah && cd fah # 创建/复制config.xml singularity build fah.sif docker://CONTAINER-PATH/fah-gpu:VERSION singularity instance start --nv -B$(pwd):/fah fah.sif fah_instance singularity exec instance://fah_instance /bin/bash -c "coproc /usr/bin/FAHClient" tail -f log.txt
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务