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 的环境有以下几种共享方法:

  1. environment.yml 配置文件共享;
  2. conda-pack 工具打包;
  3. 直接共享虚拟目录。

方法一:配置文件共享

这种方法是将现有环境中配置、已安装的包、依赖关系、路径等信息导出到 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 是基于云的文件系统,底层的对象存储和数据库都是网络资源,读和写都会有一定的时延。对性能敏感的读者可以通过以下方式进行优化和调整:

  1. 在内网环境中自建数据库和对象存储,尽量让这些资源与设备靠近;
  2. 为挂载点主机配备更高速的 SSD,让缓存可以写在更快的磁盘上;
  3. 加大带宽,打破网络接口瓶颈。

另外,读者也可以针对不同的虚拟环境的类型和规模来灵活改变 Conda 虚拟环境共享方法,让 Conda 和 JuiceFS 都在最适合的状态下工作。

总结

本文简要分享了在多机环境下,如何利用 JuiceFS 复用 Conda 虚拟环境的具体方法与注意事项。希望这篇文章中的技巧和经验能够为读者的日常开发和团队协作提供帮助,并提升工作效率。我们鼓励感兴趣的读者亲自动手尝试,并在实践中探索更多的优化方式。

如果您在配置和使用过程中遇到任何问题,欢迎前往 JuiceFS 用户社区进行反馈、提问与交流。您的问题和分享将有助于推动整个社区的进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【推荐算法】单目标精排模型——FiBiNET

key word: 学术论文 Motivation: 传统的Embedding&MLP算法是通过内积和Hadamard product实现特征交互的,这篇文章的作者提出了采用SENET实现动态学习特征的重要性;作者认为简单的内积和Hadamard product无法有效对稀疏特征进行特征交互&a…

启动你的RocketMQ之旅(二)-broket和namesrv启动流程

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页: 笑霸final的主页2 📕系列专栏:java专栏 📧如果文章知识点有错误的地方,请指正&#…

vue3-canvas实现在图片上框选标记(放大,缩小,移动,删除)

双图版本(模板对比) 业务描述:模板与图片对比,只操作模板框选的位置进行色差对比,传框选坐标位置给后端,返回对比结果显示 draw.js文件: 新增了 createUuid,和求取两个数组差集的方…

python编程Day13-异常介绍捕获异常抛出异常

异常 介绍 1, 程序在运行时, 如果Python解释器遇到到一个错误, 则会停 止程序的执行, 并且提示一些错误信息, 这就是异常. 2, 程序停止执行并且提示错误信息这个动作, 通常称之为: 抛出 (raise) 异常 # f open(aaaa.txt) # FileNotFoundError: [Errno 2] No such file or dire…

计网(王道的总结)-数据链路层-网络层-传输层

由于时间有限,把每个王道的章节最后一节放在一起,分别看看复习知识点。 3.6.4 IEEE 802.11 无线局域网 重点: 3.7 广域网 真题考频:极低 3.8以太网交换机 4.1网络层的功能 4.2.1IPv4分组 最重要的: TTL:…

【优选算法篇】:揭开二分查找算法的神秘面纱--数据海洋中的精准定位器

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 一.二分查找算法二.算法模板模板一模板二模板三 三.例题演练1.x的平…

PlantUML——类图

背景 类图是UML模型中的静态视图,其主要作用包括: 描述系统的结构化设计,显示出类、接口以及它们之间的静态结构和关系。简化对系统的理解,是系统分析与设计阶段的重要产物,也是系统编码和测试的重要模型依据。 在U…

来也RPA程序异常处理

1、程序异常模块怎么弄:连接第一个流程块后,连接第二个流程块就是虚线异常块。这是编辑器固定的功能。 2、异常模块做什么?系统会自动把异常文本,通输入参数 $BlockInput 传入异常流程块。 然后,这个异常文本&#xf…

电子应用设计方案-43:智能手机充电器系统方案设计

智能手机充电器系统方案设计 一、引言 随着智能手机的广泛应用,对充电器的性能、效率和安全性提出了更高的要求。本方案旨在设计一款高效、安全、兼容多种快充协议的智能手机充电器。 二、系统概述 1. 系统目标 - 提供快速、稳定、安全的充电功能。 - 兼容主流的智…

Java Agent(一)、 初步认识Instrumentation

目录 1、什么是Instrumentation? 2、底层机制 2.1、工作流程 2.2、Instrumentation API 3、加载Java Agent 3.1、静态Agent示例 3.1.1、定义一个agent 3.1.2、配置 MANIFEST.MF 3.1.3、定义main测试类 3.1.4、启动参数添加-javaagent 3.2、动态Agent示例…

关于SpringBoot项目创建后构建总是失败的问题

第一个问题:IDEA创建项目总是失败 原因:创建项目的时候默认使用的是https://start.spring.io,这个是一个外国网站,众所周知的就是国内访问总是出现不稳定的现象,这就是导致项目创建失败的最终原因。 解决方法&#x…

Java-自动拆箱/装箱/缓存/效率

为什么基本类型需要包装类? 泛型与集合支持问题:基本数据类型在使用上虽然方便、简单且高效,但像泛型以及集合元素的存储等场景并不支持基本数据类型,而包装类可以解决这个问题,使其能更好地融入到一些需要对象类型的…

计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

微服务网关SpringCloudGateway、Kong比较

网关产品 1. Spring Cloud Gateway 基本信息 Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,基于Spring 5、Project Reactor和Spring Boot 2构建。它旨在为微服务架构提供一种简单而有效的API网关解决方案。 功能特点 路由功能强大:使用Rou…

实现基于分布式的LAMP架构+NFS实时同步到备份服务器

概述 项目计划用WordPress搭建一个博客系统, 为了性能更好,两个服务器都对外提供WordPress博客系统服务, 数据放在MySQL服务器, 有些上传的图片发送到NFS服务器上,并且把NFS数据实时同步到一个备份服务器上。 服务名称IP地址DNS10.0.0.200WEB110.0.0.201W…

【NVIDIA orin nx 安装ultralytics yolov11】

注意:不同用户安装的python可能会在不同的路径,因此不同的pip管理会导致安装的 torch和torchvision会在不同的路径下 记得区分用户来运行yolo 一、确认系统 JetPack 版本 此处使用5.1.1 1、查看JetPack 版本 jtop二、安装 ultralytics、pytorch、torchvision、onnxruntime…

Linux系统挂载exfat格式U盘教程,触觉智能RK3562开发板演示

本文介绍Linux系统(Ubuntu/Debian通用)挂载exfat格式U盘的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教…

【Vulkan入门】08-CreateRenderPass

目录 先叨叨git信息关键代码TestPipeLine::CreateRenderPass() 先叨叨 上篇已经为Pipeline编写好了程序(Shader)。接下来要为Pipeline创建RenderPass。 关于RenderPass,在【Vulkan入门】06-Pipeline介绍中已经作了简单的介绍。这里再详细说一…

从 HTTP 到 HTTPS 再到 HSTS

近些年,随着域名劫持、信息泄漏等网络安全事件的频繁发生,网站安全也变得越来越重要,也促成了网络传输协议从 HTTP 到 HTTPS 再到 HSTS 的转变。 HTTP HTTP(超文本传输协议) 是一种用于分布式、协作式和超媒体信息系…

01-Chromedriver下载与配置(mac)

下载地址: 这里我用的最后一个,根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址:https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址:https://googlechromelabs.git…