type
status
date
slug
summary
tags
category
icon
password
😀
工作未开始,工作室电脑一个环境,个人笔记本上一个环境,远程机器还需一个环境,你需要一个保持环境相同,小白必看!

📝 主旨内容

背景

分布式机器学习(多机)或者代码协同,都需要保持环境的相同,要不然会导致一系列的坑……博主是第一次尝试多机多卡进行机器学习,在这里也卡了一会,需要在另一张有3090的机器上进行分布式训练,但是训练前,需要保持两台机器的环境相同(包括torch、python、pip以及scipy等一系列的包)这个问题可以有一下两种解决方案

一、conda

使用conda方法前,你需要两台机器上都安装了conda(推荐Miniconda),原始环境上使用Conda配置好了环境,并且安装了所有所需的python依赖以及Pytorch,你希望将相同的环境快速复制到另一台机器上,可以通过以下步骤实现:
不过请注意:两台机器的系统需要相同!!!我在这就踩了个坑

1.导出环境

在原始机器上,首先激活你想要导出的环境,然后使用conda env export命令导出环境到一个YAML文件中。例如,如果你的环境名为myenv,可以这样做:
这将创建一个名为environment.yml的文件,里面包含了环境中所有安装的包及其版本号。
notion image

2.复制环境文件

将生成的environment.yml文件从原始机器复制到新机器上。你可以使用scp(安全复制)命令,或者如果两台机器不方便直接连接,可以先复制到一个中间设备(如USB驱动器或通过电子邮件)。
使用scp的命令示例:
还可以指定端口

3.在新机器上创建环境

在目标机器上,使用conda env create命令从environment.yml文件创建环境:
这个命令会读取YAML文件,并尝试在新机器上创建一个与原始机器相同的环境,包括安装所有列出的包及其依赖。你可以使用vim来读取YAML文件,应该是以下的格式
(如果你的后缀名不是YAML,这有可能传输过程中被错误的重命名了,不要惊慌,将其重命名为environment.yml,再执行第三步即可)
notion image
但是到这里,我的操作就终止了,出现了以下报错
这个报错是由于平台不匹配造成的,environment.yml文件可能是在不同的操作系统(例如Windows)上生成的,而你正在尝试在Linux上创建环境。某些包的版本可能是特定于平台的。我也没有找到特别好的解决方案,只能不了了之,使用第二种方案,如果你没有这个问题,请执行第四步

4.激活新环境

环境创建完成后,使用conda activate命令激活新环境:

二、编写requirement.txt

列一个requirement.txt文件,然后发送给另一台机器,以供其进行安装,具有以下步骤:

1.生成完整的依赖列表

再你当前的环境中,可以通过pip freeze命令列出所有已安装的包及其版本:

2.筛选依赖

然后,你可以手动编辑requirements_all.txt文件,删除那些明显属于Python标准库的包,或者是你知道不需要在目标环境中安装的包。
对于自动化筛选,尽管直接识别和排除标准库的包不是非常直观,但你可以专注于移除那些常见的、通常随Python环境自带的包,如pipsetuptools等。
这个步骤可能需要你对环境中用到的包有一定了解,以判断哪些是必需的,哪些是可选的或者是自带的。
或者,你可以让gpt帮你完成这部分的工作

3.简化requirements.txt

如果你的项目有setup.py文件,或者你确切知道哪些包是项目运行必需的,直接手动编写requirements.txt可能更为简洁有效。

4.在另一台机器上安装依赖

  1. requirements.txt文件传输到目标机器: 使用之前提到的scp命令,如果已经有了requirements.txt文件:
scp -P 100 requirements.txt username@target_machine_ip:/path/to/target/directory
  1. 在目标机器上安装依赖: 首先,确保你已经在目标机器上激活了目标Python环境。然后,使用pip根据requirements.txt文件安装依赖:
这将会安装requirements.txt中列出的所有包及其依赖。

🤗 注意事项

  • 当通过pip freeze生成的依赖列表时,可能会包含一些特定项目不直接依赖的包。这是因为一些包可能会作为其他包的依赖被安装。
  • 在另一台机器上安装依赖时,确保目标环境与源环境尽可能相似,特别是Python版本和操作系统,以避免兼容性问题。
 
💡
有关这篇博客的任何问题,欢迎您在底部评论区留言,我会在github邮箱中第一时间收到邮件,让我们一起交流~
颜色空间——RGB and YCbCr开发中的不同测试
  • Giscus
Zachary_Yang
Zachary_Yang
一个普通的干饭人🍚
Announcement
🎉欢迎来到我的博客🎉
-- 亲爱的读者们,你们好! ---
👏在这里,我希望能够和你们一起分享我对生活的观察、对技术的理解和热爱,暂将博客分为以下几个栏目👏
🌿 心绪漫卷边:一些小随笔
🌌 智绘非遇路:AI领域
😊 浅笑编程边:前后端开发
🛠 技术汇流石下:零散技术分享

祝好,
Zachary_Yang