上線倒計(jì)時(shí)單頁(yè)網(wǎng)站模板小網(wǎng)站搜什么關(guān)鍵詞好
Conda 是當(dāng)前 AI 應(yīng)用開(kāi)發(fā)領(lǐng)域中非常流行的環(huán)境和包管理系統(tǒng),因其能夠簡(jiǎn)單便捷地創(chuàng)建與系統(tǒng)資源相隔離的虛擬環(huán)境廣受歡迎。
Conda 支持在不同的操作系統(tǒng)上重建相同的工作環(huán)境,但在環(huán)境共享復(fù)用方面仍存在一些挑戰(zhàn)。比如,在不同機(jī)器上復(fù)用相同環(huán)境需手動(dòng)執(zhí)行多步驟,過(guò)程中可能出現(xiàn)依賴(lài)不一致的問(wèn)題。其次,維護(hù)多個(gè)環(huán)境版本并保持同步對(duì)快速迭代的項(xiàng)目,操作起來(lái)較為繁瑣。
作為一個(gè)云原生分布式文件系統(tǒng),JuiceFS 極大地簡(jiǎn)化了數(shù)據(jù)和環(huán)境的共享過(guò)程。開(kāi)發(fā)人員可以將 Conda 環(huán)境存儲(chǔ)在 JuiceFS,實(shí)現(xiàn)環(huán)境配置的共享和實(shí)時(shí)訪問(wèn)。JuiceFS 的跨平臺(tái)兼容性在多操作系統(tǒng)和云環(huán)境之間提供了無(wú)縫的數(shù)據(jù)共享能力,支持復(fù)雜的多平臺(tái)開(kāi)發(fā)需求。
本文將從 Conda 的基本用法開(kāi)始,一步步為您介紹 Conda 虛擬環(huán)境的常用共享方法、存在的問(wèn)題,以及如何應(yīng)用 JuiceFS 讓環(huán)境共享變簡(jiǎn)單。
Conda 的基本用法
Conda 提供了兩個(gè)主要版本:一個(gè)是預(yù)裝了大量數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)庫(kù)的 Anaconda,另一個(gè)是更簡(jiǎn)潔的 Miniconda,僅包含基本的 Python 和 Conda 環(huán)境管理工具。
Conda 是開(kāi)源的跨平臺(tái)工具,支持在 Linux、Mac 和 Windows 系統(tǒng)上運(yùn)行。各操作系統(tǒng)的安裝方式略有不同,關(guān)于 Miniconda 或 Anaconda 的安裝細(xì)節(jié),請(qǐng)讀者參考其官方文檔,本文不再贅述。
1. 查看虛擬環(huán)境
默認(rèn)情況下,Conda 會(huì)將新虛擬環(huán)境的相關(guān)數(shù)據(jù)保存在它的安裝目錄,可以使用 conda env list
查看詳情。如下圖,是 Linux 系統(tǒng)中內(nèi)置的 base 虛擬環(huán)境的保存路徑。
2. 創(chuàng)建虛擬環(huán)境
使用 create
命令創(chuàng)建新虛擬環(huán)境,如下圖,創(chuàng)建了一個(gè)名為 myrag 的虛擬環(huán)境。執(zhí)行命令會(huì)有一個(gè)提示,確認(rèn)后瞬間就能完成虛擬環(huán)境的創(chuàng)建。
可以看到,新的虛擬環(huán)境會(huì)保存在 miniconda 的 $base/envs/
目錄中。
3. 激活虛擬環(huán)境
使用 activate
可以激活一個(gè)虛擬環(huán)境,如下圖。激活的虛擬環(huán)境會(huì)有一個(gè) * 標(biāo)識(shí),終端提示符前面也有虛擬環(huán)境的名稱(chēng)。
4. 基本使用
激活虛擬環(huán)境以后,利用 conda install
可以安裝 Anaconda 倉(cāng)庫(kù)中提供的各種包和庫(kù)。比如,在 myrag 虛擬環(huán)境中,當(dāng)前的 python 版本是 3.12.3。
執(zhí)行命令安裝 conda-forge::python
Python 版本就替換成了 3.13.0
同樣的,可以在虛擬環(huán)境中安裝特定版本的 NodeJS、Rust、Golang、Java 等。通過(guò) conda install 命令安裝的包全都存儲(chǔ)在虛擬目錄中,它與操作系統(tǒng)的是隔離的,安裝的包互不影響。
5. 退出虛擬環(huán)境
執(zhí)行 conda deactivate
命令即可退出虛擬環(huán)境
虛擬環(huán)境復(fù)用的挑戰(zhàn)
現(xiàn)代開(kāi)發(fā)環(huán)境通常復(fù)雜且多樣化,不僅涉及團(tuán)隊(duì)協(xié)作中的多人多機(jī)情況,每位開(kāi)發(fā)者也可能同時(shí)維護(hù)多個(gè)開(kāi)發(fā)環(huán)境。如果在一臺(tái)設(shè)備上配置好的開(kāi)發(fā)環(huán)境能夠便捷地在其他設(shè)備上復(fù)用,這將大大節(jié)省開(kāi)發(fā)者的時(shí)間和精力,同時(shí)有效避免因單獨(dú)配置環(huán)境而導(dǎo)致的版本不統(tǒng)一等問(wèn)題。
一般而言,Conda 的環(huán)境有以下幾種共享方法:
environment.yml
配置文件共享;conda-pack
工具打包;- 直接共享虛擬目錄。
方法一:配置文件共享
這種方法是將現(xiàn)有環(huán)境中配置、已安裝的包、依賴(lài)關(guān)系、路徑等信息導(dǎo)出到 environment.yml 配置文件,然后根據(jù)這個(gè)配置文件在其他設(shè)備上重建虛擬環(huán)境。
# 導(dǎo)出配置好的環(huán)境配置
conda env export > environment.yml
把配置文件拷貝到目標(biāo)設(shè)備并據(jù)此重建虛擬環(huán)境:
# 使用配置文件創(chuàng)建虛擬環(huán)境
conda env create -f environment.yml
這是 Conda 官方推薦的環(huán)境共享方式,它的優(yōu)勢(shì)在于可以跨系統(tǒng)、跨架構(gòu),因?yàn)樗蚕淼氖遣牧锨鍐?#xff08;而不是材料),在目標(biāo)設(shè)備上只要照著清單安裝所需的資源即可。但這種方式對(duì)安裝了大量包的環(huán)境不太友好,需要目標(biāo)設(shè)備重復(fù)下載資源,如果網(wǎng)絡(luò)環(huán)境不好的話,難免要多花些時(shí)間。
方法二:使用打包工具
這種方法是使用專(zhuān)門(mén)的工具來(lái)打包虛擬環(huán)境,把它所有東西都裝到一個(gè)壓縮包里,這樣在目標(biāo)設(shè)備上解壓就能使用。
# 需要安裝 conda-pack 程序
conda install conda-pack# 打包當(dāng)前環(huán)境
conda pack -n xxx
conda-pack 會(huì)將虛擬環(huán)境打包成一個(gè) tar.gz 壓縮包,拷貝到目標(biāo)設(shè)備,解壓即可直接使用。
這種方法可以彌補(bǔ)第一種方法的不足,對(duì)于安裝了特別多包的環(huán)境,復(fù)用的效率會(huì)更高。但它也存在一些不足,比如環(huán)境的變化無(wú)法在多臺(tái)設(shè)備之間實(shí)時(shí)同步。
另外,如果虛擬環(huán)境中包含 pip 或 setup.py 安裝的包(editable packages),那么它就無(wú)法打包這個(gè)虛擬環(huán)境。
方法三:直接共享虛擬目錄
這種方式是直接把 conda 虛擬目錄拷貝或共享給其他設(shè)備使用,相比之下,這是三種方式當(dāng)中最簡(jiǎn)單直接的虛擬環(huán)境共享方法。但它的局限和缺點(diǎn)也很明顯,因?yàn)樘摂M環(huán)境中的某些文件可能包含硬編碼的路徑信息,在不同設(shè)備上可能是不同的,這就會(huì)導(dǎo)致環(huán)境無(wú)法正常工作。因此這種方法要求共享使用的設(shè)備有相同的 CPU 架構(gòu)和操作系統(tǒng)。
上述復(fù)用虛擬環(huán)境的方法各有利弊和適合的場(chǎng)景,難說(shuō)孰優(yōu)孰劣。但可以確定的是,想要高效的復(fù)用環(huán)境,離不開(kāi)一個(gè)可靠的數(shù)據(jù)共享方案。
特別是像 AI 應(yīng)用這類(lèi)日新月異變化的項(xiàng)目,開(kāi)發(fā)環(huán)境的一致性和高效協(xié)作尤為重要,當(dāng)機(jī)器數(shù)量很多,而且環(huán)境中的資源經(jīng)常發(fā)生變化,且要求全部使用一致的虛擬環(huán)境時(shí),就需要引入像 JuiceFS 這樣能夠便捷提供多設(shè)備數(shù)據(jù)共享能力的專(zhuān)業(yè)工具來(lái)滿足需求。
用 JuiceFS 托管 Conda 虛擬環(huán)境
JuiceFS 是云原生的分布式文件系統(tǒng),利用對(duì)象存儲(chǔ)作為底層數(shù)據(jù)存儲(chǔ),并通過(guò)獨(dú)立的數(shù)據(jù)庫(kù)管理元數(shù)據(jù)。這種獨(dú)特的架構(gòu)設(shè)計(jì),使得分布在不同云端、不同區(qū)域的 JuiceFS 客戶端能夠高效地共享和讀寫(xiě)同一份數(shù)據(jù)。JuiceFS 提供了數(shù)據(jù)一致性保障,并結(jié)合完善的緩存技術(shù),實(shí)現(xiàn)數(shù)據(jù)的可靠存儲(chǔ)和高速訪問(wèn)。特別是對(duì)可靠性要求較高的多客戶端數(shù)據(jù)共享場(chǎng)景中,JuiceFS 是理想的解決方案。
作為開(kāi)源、易用且功能強(qiáng)大的分布式文件系統(tǒng),JuiceFS 能在不同環(huán)境中實(shí)現(xiàn)數(shù)據(jù)的高效訪問(wèn)和共享。其低延遲和高并發(fā)能力,讓開(kāi)發(fā)者能夠快速訪問(wèn)和同步 Conda 虛擬環(huán)境,顯著降低環(huán)境配置與同步的時(shí)間成本。
在開(kāi)發(fā)環(huán)境中引入 JuiceFS,并靈活運(yùn)用其共享和緩存功能,可以為 Conda 賦予便捷的資源共享能力。
1. 準(zhǔn)備 JuiceFS
JuiceFS 是開(kāi)源軟件,任何企業(yè)和個(gè)人都可以在遵循 Apache 2.0 協(xié)議的基礎(chǔ)上自由分發(fā)使用。
提示:對(duì)于性能有更極致要求的用戶,還可以選擇 JuiceFS 的云服務(wù)或私有部署的企業(yè)版本,它們由 Juicedata 自研的高性能分布式元數(shù)據(jù)引擎驅(qū)動(dòng),可以承載更大規(guī)模的數(shù)據(jù)。
對(duì)于使用開(kāi)源版的用戶,只需在業(yè)務(wù)端就近購(gòu)買(mǎi)對(duì)象存儲(chǔ)和數(shù)據(jù)庫(kù)(Redis、Postgres、MySQL 等),或是自行搭建這兩類(lèi)資源。
JuiceFS 文件系統(tǒng)的創(chuàng)建非常簡(jiǎn)單,有需要可以參考官方文檔。這里采用社區(qū)版客戶端,使用本地內(nèi)網(wǎng)自行搭建的 Redis 和 MinIO 創(chuàng)建一個(gè)名為 myjfs
的文件系統(tǒng)(元數(shù)據(jù)引擎為 redis://192.168.3.18/1
)。
完成了文件系統(tǒng)的創(chuàng)建,接下來(lái)需要掛載這個(gè)文件系統(tǒng)。掛載位置可以自行決定,這里使用了 -d
選項(xiàng)以守護(hù)進(jìn)程的方式掛載到了 /myjfs
目錄,同時(shí)開(kāi)啟了 --writeback
回寫(xiě)模式,數(shù)據(jù)會(huì)先寫(xiě)在本地緩存盤(pán)并異步寫(xiě)到對(duì)象存儲(chǔ),從而獲得更快的寫(xiě)速度。
提示:
--writeback
回寫(xiě)模式對(duì)磁盤(pán)的可靠性有一定的要求,因?yàn)閿?shù)據(jù)會(huì)先寫(xiě)到磁盤(pán)緩存再存入對(duì)象存儲(chǔ),在寫(xiě)數(shù)據(jù)時(shí)要防止系統(tǒng)斷電,避免寫(xiě)不完全。
sudo juicefs mount -d --writeback redis://192.168.3.18/1 /myjfs
JuiceFS 是分布式的文件系統(tǒng),在任何能夠訪問(wèn)到這套 Redis 和 MinIO 的主機(jī)上都可以使用 JuiceFS 客戶端同時(shí)掛載這個(gè)文件系統(tǒng)。
現(xiàn)在,你可以把 JuiceFS 掛載點(diǎn)當(dāng)作設(shè)備之間的高性能網(wǎng)盤(pán),用來(lái)共享 environment.yml 或 conda-pack 導(dǎo)出的壓縮包。也可以把 Conda 的默認(rèn)存儲(chǔ)路徑設(shè)置在 JuiceFS 的掛載點(diǎn)(這里是 /myjfs
),讓所有設(shè)備共享使用目錄中的虛擬環(huán)境。
2. 修改 Conda 的默認(rèn)存儲(chǔ)路徑
Conda 的默認(rèn)存儲(chǔ)路徑可以通過(guò)修改配置文件來(lái)變更,Linux 或 macOS 系統(tǒng)位于 ~/.condarc
,Windows 位于 C:\Users\用戶名\.condarc
,該文件會(huì)在首次執(zhí)行 conda config
命令時(shí)自動(dòng)創(chuàng)建。
可以手動(dòng)修改配置文件中的 envs_dirs
數(shù)組,定義所有可用的虛擬環(huán)境存儲(chǔ)路徑。也可以執(zhí)行命令修改,比如將路徑修改為 /myjfs/conda
:
conda config --add envs_dirs /myjfs/conda
接下來(lái)再創(chuàng)建虛擬環(huán)境,就會(huì)存儲(chǔ)到 JuiceFS 上面。
同樣的,可以把已經(jīng)創(chuàng)建的虛擬環(huán)境目錄拷貝到 JuiceFS 上面直接使用。
3. 善用 warmup 加速使用
在其它主機(jī)上復(fù)用 Conda 環(huán)境時(shí),掛載文件系統(tǒng)以后,可以使用 JuiceFS 提供的 warmup 命令來(lái)預(yù)先將相關(guān)的目錄預(yù)熱到本地,從而加快訪問(wèn)。如下圖,是將整個(gè) /myjfs/conda
目錄都執(zhí)行了預(yù)熱。
4. 注意事項(xiàng)
對(duì)于目錄共享和工具導(dǎo)出方式的虛擬環(huán)境,不同 CPU 架構(gòu)系統(tǒng)創(chuàng)建的 Conda 虛擬環(huán)境之間不能復(fù)用。這是因?yàn)樘摂M環(huán)境中安裝的軟件包是針對(duì)特定的 CPU 架構(gòu)進(jìn)行編譯的。
如下圖,窗口上方的系統(tǒng)是 x86_64 架構(gòu)的,雖然它可以激活共享的虛擬環(huán)境,但卻無(wú)法執(zhí)行環(huán)境中的程序。因?yàn)檫@個(gè)虛擬環(huán)境是在窗口下方的 aarch64 架構(gòu)系統(tǒng)上創(chuàng)建的,二者無(wú)法共用。
5. 其他問(wèn)題
在使用 JuiceFS 作為 Conda 虛擬環(huán)境存儲(chǔ)路徑時(shí),你會(huì)發(fā)現(xiàn)讀寫(xiě)速度沒(méi)有本地磁盤(pán)那么快。根本原因在于 JuiceFS 是基于云的文件系統(tǒng),底層的對(duì)象存儲(chǔ)和數(shù)據(jù)庫(kù)都是網(wǎng)絡(luò)資源,讀和寫(xiě)都會(huì)有一定的時(shí)延。對(duì)性能敏感的讀者可以通過(guò)以下方式進(jìn)行優(yōu)化和調(diào)整:
- 在內(nèi)網(wǎng)環(huán)境中自建數(shù)據(jù)庫(kù)和對(duì)象存儲(chǔ),盡量讓這些資源與設(shè)備靠近;
- 為掛載點(diǎn)主機(jī)配備更高速的 SSD,讓緩存可以寫(xiě)在更快的磁盤(pán)上;
- 加大帶寬,打破網(wǎng)絡(luò)接口瓶頸。
另外,讀者也可以針對(duì)不同的虛擬環(huán)境的類(lèi)型和規(guī)模來(lái)靈活改變 Conda 虛擬環(huán)境共享方法,讓 Conda 和 JuiceFS 都在最適合的狀態(tài)下工作。
總結(jié)
本文簡(jiǎn)要分享了在多機(jī)環(huán)境下,如何利用 JuiceFS 復(fù)用 Conda 虛擬環(huán)境的具體方法與注意事項(xiàng)。希望這篇文章中的技巧和經(jīng)驗(yàn)?zāi)軌驗(yàn)樽x者的日常開(kāi)發(fā)和團(tuán)隊(duì)協(xié)作提供幫助,并提升工作效率。我們鼓勵(lì)感興趣的讀者親自動(dòng)手嘗試,并在實(shí)踐中探索更多的優(yōu)化方式。
如果您在配置和使用過(guò)程中遇到任何問(wèn)題,歡迎前往 JuiceFS 用戶社區(qū)進(jìn)行反饋、提問(wèn)與交流。您的問(wèn)題和分享將有助于推動(dòng)整個(gè)社區(qū)的進(jìn)步。