大模型环境配置,包括多机多卡 conda env export > qwen_environment.yml同步环境

多机一致环境:

pip freeze > requirements.txt

装特定的torch,--extra-index-url https://download.pytorch.org/whl/cu118

pip install torch==2.2.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

要将 Conda/Mamba 环境从一台机器同步到另一台机器,最好的方法是创建一个环境规范文件,然后在目标机器上使用这个文件重新创建环境。这种方法比直接复制整个环境目录更可靠,因为它考虑了不同系统间可能存在的差异。以下是详细步骤:

  1. 在源机器上导出环境:

    bash

    复制
    conda activate Qwen
    conda env export > qwen_environment.yml
    

    这会创建一个 qwen_environment.yml 文件,其中包含环境的所有包和依赖信息。

  2. 将 yml 文件传输到目标机器:

    bash

    复制
    scp qwen_environment.yml apus@target_machine:/path/to/destination/
    

    替换 target_machine 和 /path/to/destination/ 为实际的目标机器地址和路径。

  3. 在目标机器上,使用这个 yml 文件创建新环境:

    bash

    复制
    conda env create -f /path/to/destination/qwen_environment.yml
    

    或者如果你使用 mamba:

    bash

    复制
    mamba env create -f /path/to/destination/qwen_environment.yml
    
  4. 激活新环境并验证:

    bash

    复制
    conda activate Qwen
    conda list
    

如果环境中包含一些特定于路径的包或自定义安装,你可能需要手动处理这些特殊情况。

对于大型环境,你也可以考虑以下替代方法:

  1. 使用 conda-pack(适用于完全相同的操作系统和 Python 版本):

     

    在源机器上:

    bash

    复制
    conda install conda-pack
    conda pack -n Qwen -o qwen_env.tar.gz
    

    将 tar.gz 文件传输到目标机器,然后:

    bash

    复制
    mkdir -p ~/mambaforge/envs/Qwen
    tar -xzf qwen_env.tar.gz -C ~/mambaforge/envs/Qwen
    ~/mambaforge/envs/Qwen/bin/conda-unpack
    
  2. 使用 requirements.txt(仅 Python 包):

    bash

    复制
    conda activate Qwen
    pip list --format=freeze > requirements.txt
    

    传输 requirements.txt 到目标机器,然后:

    bash

    复制
    conda create -n Qwen python=3.x  # 使用相同的 Python 版本
    conda activate Qwen
    pip install -r requirements.txt
    

每种方法都有其优缺点,选择哪种取决于你的具体需求和环境复杂度。通常,使用 conda env export 和 conda env create 是最可靠和可移植的方法。

一、同步权重

./scp_zeng.sh /data/zengzijian/Qw
en2-57B-A14B /data/zengzijian/Qwen2-57B-A14B gpu004 gpu009
#!/bin/bash

# 检查至少提供了一个参数
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <file_or_directory_to_transfer> <target_directory_on_remote_server> [optional: remote_hosts...]"
    exit 1
fi

FILE_OR_DIR_TO_TRANSFER=$1
TARGET_DIRECTORY=$2
USER="zeng" # 定义远程主机上的用户

# 如果提供了远程主机参数,则使用它们;否则,使用默认主机列表
if [ "$#" -gt 2 ]; then
    shift 2 # 移除前两个参数
    REMOTE_HOSTS=("$@") # 剩余的所有参数都是远程主机
else
    # 定义默认远程主机列表
    REMOTE_HOSTS=("gpu004" "gpu006")
fi

# 循环遍历每个远程主机并执行SCP命令传输文件或目录
for HOST in "${REMOTE_HOSTS[@]}"; do
    echo "Creating target directory on $USER@$HOST:$TARGET_DIRECTORY"
    ssh "$USER@$HOST" "mkdir -p $TARGET_DIRECTORY"
    
    echo "Starting transfer of $FILE_OR_DIR_TO_TRANSFER to $USER@$HOST:$TARGET_DIRECTORY"
    scp -r "$FILE_OR_DIR_TO_TRANSFER" "$USER@$HOST:$TARGET_DIRECTORY" && echo "Transfer of $FILE_OR_DIR_TO_TRANSFER to $HOST completed."
done

echo "All transfers completed."

文件同步脚本解释:

claude 3.5 sonnet

同步脚本:

bash

复制

#!/bin/bash

这一行指定使用 bash 解释器来执行此脚本。

bash

复制

if [ "$#" -lt 2 ]; then
    echo "Usage: $0 <file_or_directory_to_transfer> <target_directory_on_remote_server> [optional: remote_hosts...]"
    exit 1
fi

这段代码检查脚本至少有两个参数。如果参数少于2个,它会打印使用说明并退出脚本(退出状态为1,表示错误)。

FILE_OR_DIR_TO_TRANSFER=$1
TARGET_DIRECTORY=$2
USER="zeng" # 定义远程主机上的用户

这里将第一个参数赋值给 FILE_OR_DIR_TO_TRANSFER,第二个参数赋值给 TARGET_DIRECTORY,并定义了远程主机上的用户名为 "zeng"。

bash

复制

if [ "$#" -gt 2 ]; then
    shift 2 # 移除前两个参数
    REMOTE_HOSTS=("$@") # 剩余的所有参数都是远程主机
else
    # 定义默认远程主机列表
    REMOTE_HOSTS=("gpu004" "gpu006")
fi

这段代码检查是否提供了额外的参数(远程主机)。如果有,它会移除前两个参数,并将剩余的所有参数作为远程主机列表。如果没有额外参数,它会使用默认的主机列表。

bash

复制

for HOST in "${REMOTE_HOSTS[@]}"; do

这行开始一个循环,遍历所有指定的远程主机。

bash

复制

    echo "Creating target directory on $USER@$HOST:$TARGET_DIRECTORY"
    ssh "$USER@$HOST" "mkdir -p $TARGET_DIRECTORY"

这两行为每个远程主机创建目标目录。它首先打印一条消息,然后使用 SSH 在远程主机上执行 mkdir 命令。

bash

复制

    echo "Starting transfer of $FILE_OR_DIR_TO_TRANSFER to $USER@$HOST:$TARGET_DIRECTORY"
    scp -r "$FILE_OR_DIR_TO_TRANSFER" "$USER@$HOST:$TARGET_DIRECTORY" && echo "Transfer of $FILE_OR_DIR_TO_TRANSFER to $HOST completed."

这部分开始文件传输。它首先打印开始传输的消息,然后使用 scp 命令递归地复制文件或目录到远程主机。如果传输成功,它会打印一条完成消息。

bash

复制

done

这标志着循环的结束。

bash

复制

echo "All transfers completed."

当所有传输都完成后,脚本打印这条最终消息。

这个脚本的主要功能是将指定的文件或目录复制到一个或多个远程主机上。它允许用户指定要传输的内容、目标目录和远程主机列表,如果没有指定远程主机,则使用默认列表。

相关推荐

  1. Spring Boot环境配置

    2024-07-20 15:42:01       41 阅读
  2. Spring Boot环境配置

    2024-07-20 15:42:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 15:42:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 15:42:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 15:42:01       45 阅读
  4. Python语言-面向对象

    2024-07-20 15:42:01       55 阅读

热门阅读

  1. 量化交易对短期收益的提升效果

    2024-07-20 15:42:01       17 阅读
  2. ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段

    2024-07-20 15:42:01       15 阅读
  3. glibc: getifaddrs_internal 占用大量cpu

    2024-07-20 15:42:01       13 阅读
  4. 【关于使用swoole的知识点整理】

    2024-07-20 15:42:01       14 阅读
  5. 弹框管理类demo

    2024-07-20 15:42:01       17 阅读
  6. 单机 Redission 存在的问题以及怎么解决

    2024-07-20 15:42:01       15 阅读
  7. 力扣(LeetCode)——70. 爬楼梯

    2024-07-20 15:42:01       14 阅读
  8. 如何使用fiddler 查看手机端数据包

    2024-07-20 15:42:01       19 阅读
  9. AI艺术创作:掌握Midjourney和DALL-E的技巧与策略

    2024-07-20 15:42:01       17 阅读
  10. 快速创建 vue 项目并添加 Dockerfile 文件

    2024-07-20 15:42:01       14 阅读