Conda + JuiceFS :增强 AI 开发环境共享能力
Conda 是当前 AI 应用开发领域中非常流行的环境和包管理系统,因其能够简单便捷地创建与系统资源相隔离的虚拟环境广受欢迎。
Conda 支持在不同的操作系统上重建相同的工作环境,但在环境共享复用方面仍存在一些挑战。比如,在不同机器上复用相同环境需手动执行多步骤,过程中可能出现依赖不一致的问题。其次,维护多个环境版本并保持同步对快速迭代的项目,操作起来较为繁琐。
作为一个云原生分布式文件系统,JuiceFS 极大地简化了数据和环境的共享过程。开发人员可以将 Conda 环境存储在 JuiceFS,实现环境配置的共享和实时访问。JuiceFS 的跨平台兼容性在多操作系统和云环境之间提供了无缝的数据共享能力,支持复杂的多平台开发需求。
本文将从 Conda 的基本用法开始,一步步为您介绍 Conda 虚拟环境的常用共享方法、存在的问题,以及如何应用 JuiceFS 让环境共享变简单。
Conda 的基本用法
Conda 提供了两个主要版本:一个是预装了大量数据科学和机器学习库的 Anaconda,另一个是更简洁的 Miniconda,仅包含基本的 Python 和 Conda 环境管理工具。
Conda 是开源的跨平台工具,支持在 Linux、Mac 和 Windows 系统上运行。各操作系统的安装方式略有不同,关于 Miniconda 或 Anaconda 的安装细节,请读者参考其官方文档,本文不再赘述。
1. 查看虚拟环境
默认情况下,Conda 会将新虚拟环境的相关数据保存在它的安装目录,可以使用 conda env list
查看详情。如下图,是 Linux 系统中内置的 base 虚拟环境的保存路径。
2. 创建虚拟环境
使用 create
命令创建新虚拟环境,如下图,创建了一个名为 myrag 的虚拟环境。执行命令会有一个提示,确认后瞬间就能完成虚拟环境的创建。
可以看到,新的虚拟环境会保存在 miniconda 的 $base/envs/
目录中。
3. 激活虚拟环境
使用 activate
可以激活一个虚拟环境,如下图。激活的虚拟环境会有一个 * 标识,终端提示符前面也有虚拟环境的名称。
4. 基本使用
激活虚拟环境以后,利用 conda install
可以安装 Anaconda 仓库中提供的各种包和库。比如,在 myrag 虚拟环境中,当前的 python 版本是 3.12.3。
执行命令安装 conda-forge::python
Python 版本就替换成了 3.13.0
同样的,可以在虚拟环境中安装特定版本的 NodeJS、Rust、Golang、Java 等。通过 conda install 命令安装的包全都存储在虚拟目录中,它与操作系统的是隔离的,安装的包互不影响。
5. 退出虚拟环境
执行 conda deactivate
命令即可退出虚拟环境
虚拟环境复用的挑战
现代开发环境通常复杂且多样化,不仅涉及团队协作中的多人多机情况,每位开发者也可能同时维护多个开发环境。如果在一台设备上配置好的开发环境能够便捷地在其他设备上复用,这将大大节省开发者的时间和精力,同时有效避免因单独配置环境而导致的版本不统一等问题。
一般而言,Conda 的环境有以下几种共享方法:
environment.yml
配置文件共享;conda-pack
工具打包;- 直接共享虚拟目录。
方法一:配置文件共享
这种方法是将现有环境中配置、已安装的包、依赖关系、路径等信息导出到 environment.yml 配置文件,然后根据这个配置文件在其他设备上重建虚拟环境。
# 导出配置好的环境配置
conda env export > environment.yml
把配置文件拷贝到目标设备并据此重建虚拟环境:
# 使用配置文件创建虚拟环境
conda env create -f environment.yml
这是 Conda 官方推荐的环境共享方式,它的优势在于可以跨系统、跨架构,因为它共享的是材料清单(而不是材料),在目标设备上只要照着清单安装所需的资源即可。但这种方式对安装了大量包的环境不太友好,需要目标设备重复下载资源,如果网络环境不好的话,难免要多花些时间。
方法二:使用打包工具
这种方法是使用专门的工具来打包虚拟环境,把它所有东西都装到一个压缩包里,这样在目标设备上解压就能使用。
# 需要安装 conda-pack 程序
conda install conda-pack
# 打包当前环境
conda pack -n xxx
conda-pack 会将虚拟环境打包成一个 tar.gz 压缩包,拷贝到目标设备,解压即可直接使用。
这种方法可以弥补第一种方法的不足,对于安装了特别多包的环境,复用的效率会更高。但它也存在一些不足,比如环境的变化无法在多台设备之间实时同步。
另外,如果虚拟环境中包含 pip 或 setup.py 安装的包(editable packages),那么它就无法打包这个虚拟环境。
方法三:直接共享虚拟目录
这种方式是直接把 conda 虚拟目录拷贝或共享给其他设备使用,相比之下,这是三种方式当中最简单直接的虚拟环境共享方法。但它的局限和缺点也很明显,因为虚拟环境中的某些文件可能包含硬编码的路径信息,在不同设备上可能是不同的,这就会导致环境无法正常工作。因此这种方法要求共享使用的设备有相同的 CPU 架构和操作系统。
上述复用虚拟环境的方法各有利弊和适合的场景,难说孰优孰劣。但可以确定的是,想要高效的复用环境,离不开一个可靠的数据共享方案。
特别是像 AI 应用这类日新月异变化的项目,开发环境的一致性和高效协作尤为重要,当机器数量很多,而且环境中的资源经常发生变化,且要求全部使用一致的虚拟环境时,就需要引入像 JuiceFS 这样能够便捷提供多设备数据共享能力的专业工具来满足需求。
用 JuiceFS 托管 Conda 虚拟环境
JuiceFS 是云原生的分布式文件系统,利用对象存储作为底层数据存储,并通过独立的数据库管理元数据。这种独特的架构设计,使得分布在不同云端、不同区域的 JuiceFS 客户端能够高效地共享和读写同一份数据。JuiceFS 提供了数据一致性保障,并结合完善的缓存技术,实现数据的可靠存储和高速访问。特别是对可靠性要求较高的多客户端数据共享场景中,JuiceFS 是理想的解决方案。
作为开源、易用且功能强大的分布式文件系统,JuiceFS 能在不同环境中实现数据的高效访问和共享。其低延迟和高并发能力,让开发者能够快速访问和同步 Conda 虚拟环境,显著降低环境配置与同步的时间成本。
在开发环境中引入 JuiceFS,并灵活运用其共享和缓存功能,可以为 Conda 赋予便捷的资源共享能力。
1. 准备 JuiceFS
JuiceFS 是开源软件,任何企业和个人都可以在遵循 Apache 2.0 协议的基础上自由分发使用。
提示:对于性能有更极致要求的用户,还可以选择 JuiceFS 的云服务或私有部署的企业版本,它们由 Juicedata 自研的高性能分布式元数据引擎驱动,可以承载更大规模的数据。
对于使用开源版的用户,只需在业务端就近购买对象存储和数据库(Redis、Postgres、MySQL 等),或是自行搭建这两类资源。
JuiceFS 文件系统的创建非常简单,有需要可以参考官方文档。这里采用社区版客户端,使用本地内网自行搭建的 Redis 和 MinIO 创建一个名为 myjfs
的文件系统(元数据引擎为 redis://192.168.3.18/1
)。
完成了文件系统的创建,接下来需要挂载这个文件系统。挂载位置可以自行决定,这里使用了 -d
选项以守护进程的方式挂载到了 /myjfs
目录,同时开启了 --writeback
回写模式,数据会先写在本地缓存盘并异步写到对象存储,从而获得更快的写速度。
提示:
--writeback
回写模式对磁盘的可靠性有一定的要求,因为数据会先写到磁盘缓存再存入对象存储,在写数据时要防止系统断电,避免写不完全。
sudo juicefs mount -d --writeback redis://192.168.3.18/1 /myjfs
JuiceFS 是分布式的文件系统,在任何能够访问到这套 Redis 和 MinIO 的主机上都可以使用 JuiceFS 客户端同时挂载这个文件系统。
现在,你可以把 JuiceFS 挂载点当作设备之间的高性能网盘,用来共享 environment.yml 或 conda-pack 导出的压缩包。也可以把 Conda 的默认存储路径设置在 JuiceFS 的挂载点(这里是 /myjfs
),让所有设备共享使用目录中的虚拟环境。
2. 修改 Conda 的默认存储路径
Conda 的默认存储路径可以通过修改配置文件来变更,Linux 或 macOS 系统位于 ~/.condarc
,Windows 位于 C:\Users\用户名\.condarc
,该文件会在首次执行 conda config
命令时自动创建。
可以手动修改配置文件中的 envs_dirs
数组,定义所有可用的虚拟环境存储路径。也可以执行命令修改,比如将路径修改为 /myjfs/conda
:
conda config --add envs_dirs /myjfs/conda
接下来再创建虚拟环境,就会存储到 JuiceFS 上面。
同样的,可以把已经创建的虚拟环境目录拷贝到 JuiceFS 上面直接使用。
3. 善用 warmup 加速使用
在其它主机上复用 Conda 环境时,挂载文件系统以后,可以使用 JuiceFS 提供的 warmup 命令来预先将相关的目录预热到本地,从而加快访问。如下图,是将整个 /myjfs/conda
目录都执行了预热。
4. 注意事项
对于目录共享和工具导出方式的虚拟环境,不同 CPU 架构系统创建的 Conda 虚拟环境之间不能复用。这是因为虚拟环境中安装的软件包是针对特定的 CPU 架构进行编译的。
如下图,窗口上方的系统是 x86_64 架构的,虽然它可以激活共享的虚拟环境,但却无法执行环境中的程序。因为这个虚拟环境是在窗口下方的 aarch64 架构系统上创建的,二者无法共用。
5. 其他问题
在使用 JuiceFS 作为 Conda 虚拟环境存储路径时,你会发现读写速度没有本地磁盘那么快。根本原因在于 JuiceFS 是基于云的文件系统,底层的对象存储和数据库都是网络资源,读和写都会有一定的时延。对性能敏感的读者可以通过以下方式进行优化和调整:
- 在内网环境中自建数据库和对象存储,尽量让这些资源与设备靠近;
- 为挂载点主机配备更高速的 SSD,让缓存可以写在更快的磁盘上;
- 加大带宽,打破网络接口瓶颈。
另外,读者也可以针对不同的虚拟环境的类型和规模来灵活改变 Conda 虚拟环境共享方法,让 Conda 和 JuiceFS 都在最适合的状态下工作。
总结
本文简要分享了在多机环境下,如何利用 JuiceFS 复用 Conda 虚拟环境的具体方法与注意事项。希望这篇文章中的技巧和经验能够为读者的日常开发和团队协作提供帮助,并提升工作效率。我们鼓励感兴趣的读者亲自动手尝试,并在实践中探索更多的优化方式。
如果您在配置和使用过程中遇到任何问题,欢迎前往 JuiceFS 用户社区进行反馈、提问与交流。您的问题和分享将有助于推动整个社区的进步。
Conda + JuiceFS :增强 AI 开发环境共享能力的更多相关文章
- 5分钟配置好你的AI开发环境
作者 | Revolver 无论是第一次设置TensorFlow的新手数据科学爱好者,还是使用TB级数据的经验丰富的AI工程师,安装库.软件包或者框架总是一个困难又繁琐的过程.但是像Docker这样的 ...
- conda配置python混合开发环境一站式入门【全平台】
下载安装 清华的镜像 [https://mirror.tuna.tsinghua.edu.cn/help/anaconda/] 官方说明 [http://conda.pydata.org/docs/u ...
- 2019-04-03 Anaconda+VSCode搭建python开发环境,并连接GIthub
1.最好的Python开发环境 :Anaconda+VSCode搭建python开发环境,conda提供了python开发环境和大量的你不用安装的库 conda的环境变量: 直接在conda 中下载启 ...
- AI应用开发实战 - 从零开始搭建macOS开发环境
AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...
- XE6移动开发环境搭建之IOS篇(5):解决Windows和虚拟机下Mac OSX的共享问题(有图有真相)
网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 在安装XE6 PAS ...
- [AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建
这篇文章详细介绍在centOS7.5上搭建基于keras/tensorflow的深度学习环境,该环境可用于实际生产.本人现在非常熟练linux(Ubuntu/centOS/openSUSE).wind ...
- Python开发篇——构建虚拟Python开发环境(Conda+Poetry)
前言 之前虽略有提及Python,但是没有实际地写点料.惭愧,惭愧,所以这次先起个头,讲讲如何构建虚拟Python开发环境.相信之前看过我博客的人可能会想:博主不会又要聊聊Docker吧?放心,不会. ...
- 华为云ModelArts 2.0全面升级,革新传统AI开发模式
[中国,上海,9月20日] 在HUAWEI CONNECT 2019期间,华为云EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台ModelArts 2.0. 现场 ...
- 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”
摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...
- HUAWEI HiAI亮相华为开发者生态大会 助力应用AI开发实现加速度
6月23日,在2018华为终端·全球合作伙伴及开发者大会AI分论坛体验区的一角,被层层叠叠的人群围得水泄不通.站在最前面的一名体验者,正跟随着“快手短视频”APP上不断出现的小人左右扭动,每完成一个动 ...
随机推荐
- SQL Server – 冷知识 (新手)
前言 没有系统化学一本语言或技术, 那便会被一些冷知识坑. 这里做些记入. 变量作用域 SQL 是远古语法, 声明变量在最顶部就是一条上古法则. 如果我看见有了用这个法则写 C# 或 JS 我就会杀了 ...
- Dubbo框架的1个核心设计点
Java领域要说让我最服气的RPC框架当属Dubbo,原因有许多,但是最吸引我的还是它把远程调用这个事情设计得很有艺术. 1.Dubbo优点较多,我只钟情其一 1.1.优点 业内对于微服务之间调用的框 ...
- servlet一些笔记、详解
一.什么是servlet? 处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西.理解这个的前提是了解一些http协议的东西,并且知道 ...
- C# + WPF 音频播放器 界面优雅,体验良好
前言 本文介绍一款使用 C# 与 WPF 开发的音频播放器,其界面简洁大方,操作体验流畅.该播放器支持多种音频格式(如 MP4.WMA.OGG.FLAC 等),并具备标记.实时歌词显示等功能. 另外, ...
- QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序?
QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序? 简介 本文将介绍如何使用QT6框架开发Web浏览器应用程序,并介绍具体的编译运行测试WebAssem ...
- nexus 部署与设置
安装nexus df -h 先查看目录磁盘空间,我安装的版本占用了四个G 空间,目录文件空间不够导致启动失败 上传 nexus 压缩包,并解压 查询 8081 端口号是否被占用 sudo netsta ...
- 直播预告 | YashanDB 2023年度发布会正式定档11月8日,邀您共同见证国产数据库发展实践!
11月8日,YashanDB 2023年度发布会将于云端直播开启,发布会以 「惟实·励新」 为主题,邀请企业用户.合作伙伴.广大开发者共同见证全新产品与解决方案.届时发布会将在墨天轮社区同步进行,欢迎 ...
- 云原生周刊:Kubernetes 1.29 中的删除、弃用和主要更改 | 2023.11.27
开源项目推荐 Orphaned ConfigMaps 该版本库包含一个脚本,用于识别 Kubernetes 命名空间中的孤立的配置映射.孤立的配置映射是指那些未被命名空间中的任何活动 Pod 或容器引 ...
- Mysql(2)—SQL语法详解(通俗易懂)
一.关于SQL 1.1 简介 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言.它主要用于数据的查询.插入.更新和删除等操作.SQL ...
- 「模拟赛」多校 A 层联训 16
比赛链接 A.四舍五入 虽然让找 \(i\),但枚举 \(i\) 很没前途啊,所以考虑找到所有 \(j\) 的个数 发现对于一组合法的 \(i.j\) 需要满足 \(i\in [kj,\ kj+0.5 ...