多机一致环境:
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 环境从一台机器同步到另一台机器,最好的方法是创建一个环境规范文件,然后在目标机器上使用这个文件重新创建环境。这种方法比直接复制整个环境目录更可靠,因为它考虑了不同系统间可能存在的差异。以下是详细步骤:
在源机器上导出环境:
bash
复制conda activate Qwen conda env export > qwen_environment.yml
这会创建一个
qwen_environment.yml
文件,其中包含环境的所有包和依赖信息。将 yml 文件传输到目标机器:
bash
复制scp qwen_environment.yml apus@target_machine:/path/to/destination/
替换
target_machine
和/path/to/destination/
为实际的目标机器地址和路径。在目标机器上,使用这个 yml 文件创建新环境:
bash
复制conda env create -f /path/to/destination/qwen_environment.yml
或者如果你使用 mamba:
bash
复制mamba env create -f /path/to/destination/qwen_environment.yml
激活新环境并验证:
bash
复制conda activate Qwen conda list
如果环境中包含一些特定于路径的包或自定义安装,你可能需要手动处理这些特殊情况。
对于大型环境,你也可以考虑以下替代方法:
使用 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
使用 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."
当所有传输都完成后,脚本打印这条最终消息。
这个脚本的主要功能是将指定的文件或目录复制到一个或多个远程主机上。它允许用户指定要传输的内容、目标目录和远程主机列表,如果没有指定远程主机,则使用默认列表。