前言
scp 默认传输顺序是按照文件名进行排序的, 但我当前工作中遇到要验证两台机器的神经网络层的精度,需要把网络层的输入输出(假设有100层, 一共64G) 从机器1传输到机器2 , 然后进行对比;这种情况下最好按照自定义的网络层的顺序进行传输, 因为这样就算中途scp传输失败,还能验证网络前面几个层的精度(数据量太大一般深夜无人的时候传输,谁都不能保证会出啥事)
代码
下面使用paramiko库来实现按照指定的文件顺序进行scp传输:
import paramiko
# 定义SSH连接信息
hostname = 'remote_host'
port = 22
username = 'username'
password = 'password'
# 定义本地文件路径和远程目录路径
local_files = ['/path/to/local/embedding1', '/path/to/local/softmax1', '/path/to/local/matmul1']
remote_dir = '/path/to/remote/directory/'
# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
# 建立SCP连接
scp = ssh.open_sftp()
# 依次传输文件
for local_file in local_files:
remote_file = remote_dir + local_file.split('/')[-1] # 获取远程文件名
scp.put(local_file, remote_file)
print(f'{local_file} transferred to {remote_file}')
# 关闭SCP连接和SSH连接
scp.close()
ssh.close()
在上述代码中,我们首先定义了SSH连接信息,包括远程主机名、端口、用户名和密码。然后定义了本地文件路径和远程目录路径。接着建立SSH连接和SCP连接,使用put
方法依次传输文件。最后关闭SCP连接和SSH连接。
需要注意的是,上述代码中的本地文件路径应该是绝对路径,而远程目录路径应该是相对路径。如果需要传输的文件较多,可以将本地文件路径和远程目录路径存储在一个列表中,然后使用循环依次传输。