Conda solving environment一晚上還不能完成有解嗎?
生物信息學(xué)習(xí)的正確姿勢(shì)
NGS系列文章包括NGS基礎(chǔ)、轉(zhuǎn)錄組分析?(Nature重磅綜述|關(guān)于RNA-seq你想知道的全在這)、ChIP-seq分析?(ChIP-seq基本分析流程)、單細(xì)胞測(cè)序分析?(重磅綜述:三萬字長(zhǎng)文讀懂單細(xì)胞RNA測(cè)序分析的最佳實(shí)踐教程 (原理、代碼和評(píng)述))、DNA甲基化分析、重測(cè)序分析、GEO數(shù)據(jù)挖掘(典型醫(yī)學(xué)設(shè)計(jì)實(shí)驗(yàn)GEO數(shù)據(jù)分析 (step-by-step) - Limma差異分析、火山圖、功能富集)等內(nèi)容。
Conda為什么越來越慢?
Conda中包含的軟件越來越多,而且軟件的不同版本都保留了下來,軟件的索引文件越來越大,安裝一個(gè)新軟件時(shí)搜索滿足環(huán)境中所有軟件依賴的軟件的搜索空間也會(huì)越來越大,導(dǎo)致solving environment越來越慢。
Conda是如何工作的
從設(shè)定的通道 (
channel)處下載通道中所有軟件的索引信息 (repodata.json) (Collecting package metadata (repodata.json))"packages" : {
"moto-1.3.7-py_0.tar.bz2" : {
"build" : "py_0",
"build_number" : 0,
"depends" : [ "aws-xray-sdk !=0.96,>=0.93", "backports.tempfile", "boto >=2.36.0", "boto3 >=1.6.15", "botocore >=1.12.13", "cookies", "dicttoxml", "docker-py", "flask", "jinja2 >=2.7.3", "jsondiff 1.1.1.*", "mock", "pyaml", "python", "python-dateutil", "python-jose <3.0.0", "pytz", "requests >=2.5", "responses >=0.9.0", "six", "werkzeug", "xmltodict" ],
"license" : "Apache-2.0",
"md5" : "17b424658cd07e678b5feebdc932eb52",
"name" : "moto",
"sha256" : "5924666f8c1758472dc4c3d22b270b46cd1c4b66c50a9ba50d5c636d2237bdd1",
"size" : 399973,
"subdir" : "noarch",
"timestamp" : 1552438392680,
"version" : "1.3.7"
}
}解析
repodata中的信息獲取所有依賴的包的信息采用
SAT-solver算法決定需要下載包的哪個(gè)版本和它們的安裝順序下載并安裝包
Conda哪一步慢?
主要是第3步,確定待安裝包的依賴包之間的兼容和已安裝軟件之間的兼容,獲得需要下載的包和對(duì)應(yīng)版本。
如何提速Conda
采用最新版的
conda(Conda4.7相比Conda4.6提速3.5倍, Conda 4.8應(yīng)該不會(huì)比4.7慢)安裝時(shí)指定版本減少搜索空間
conda install python=3.7.4安裝R包時(shí)指定R的版本也會(huì)極大減小搜索空間 (R包因其數(shù)目眾多,也是生物類軟件依賴解析較慢的原因之一)
conda install r-base=4.0.2 r-ggplot2=3.3.2采用
mamba加速軟件依賴解析 [mamba采用c++重寫了部分解析過程,這個(gè)提速效果是很明顯的] (安裝好mamba后就可以用mamba替換conda進(jìn)行安裝了)conda install mamba -c conda-forge
mamba install python=3.7.4,默認(rèn)conda解析軟件依賴時(shí)優(yōu)先考慮允許的最高版本,設(shè)置通道優(yōu)先級(jí)權(quán)限高于軟件版本新舊后,conda會(huì)能更快的解決依賴關(guān)系,避免
defaults和conda-forge通道的奇怪組合導(dǎo)致軟件依賴解析遲遲不能將結(jié)束的問題:conda config --set channel_priority strict(這個(gè)命令只需要運(yùn)行一次)。創(chuàng)建一個(gè)新環(huán)境 (
conda env create -n env_name)再安裝軟件,這樣就不用考慮與已有的軟件的兼容問題了,也可以大大降低搜索空間和提高解析軟件依賴的速度。如果安裝的軟件提供了
environment.yaml那么用起來,文件中對(duì)應(yīng)的軟件版本都很明確,解析依賴關(guān)系時(shí)更快。(具體導(dǎo)出方式見Bioconda軟件安裝神器:多版本并存、環(huán)境復(fù)制、環(huán)境導(dǎo)出)。channels:
- qiime2/label/r2020.6
- conda-forge
- bioconda
- defaults
dependencies:
- _libgcc_mutex=0.1
- _openmp_mutex=4.5
- _r-mutex=1.0.1
- alsa-lib=1.1.5
- arb-bio-tools=6.0.6
- attrs=19.3.0
- backcall=0.2.0
- bibtexparser=1.1.0
- binutils_impl_linux-64=2.34
- binutils_linux-64=2.34
- bioconductor-biobase=2.42.0
- bioconductor-biocgenerics=0.28.0
- bioconductor-biocparallel=1.16.6
- bioconductor-biostrings=2.50.2
- bioconductor-dada2=1.10.0添加Bioconda通道時(shí),注意順序,給予
conda-forge最高優(yōu)先級(jí),其次是bioconda。如果之前已經(jīng)添加好了通道,自己在~/.condarc中調(diào)整順序。conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge綜合以上組合,之前嘗試多次都沒安裝好的工具,直接搞定。
下載提速
國內(nèi)鏡像,見軟件安裝不上,可能是網(wǎng)速慢!Conda/R/pip/brew等國內(nèi)鏡像大全拿走不謝~~
換個(gè)網(wǎng)或從朋友處拷貝已經(jīng)下載好的壓縮包一般在
anaconda_root_dir/pkgs下,拷貝放在自己的anaconda3/pkgs下面,再次下載時(shí)系統(tǒng)會(huì)識(shí)別已經(jīng)下載好的包而跳過 (并不總是有效)。獲取所有相關(guān)包的名字,從朋友處拷貝下載好的安裝包。
如果拷貝過來未能自動(dòng)識(shí)別,可手動(dòng)安裝
conda install --offline local_path。
mamba install r-base=4.0.2 r-ggplot2=3.3.2 --dry-run >package_solving_result
# _anaconda_depends pkgs/main/linux-64::_anaconda_depends-2020.07-py37_0
# _r-mutex conda-forge/noarch::_r-mutex-1.0.1-anacondar_1
# binutils_impl_lin~ pkgs/main/linux-64::binutils_impl_linux-64-2.33.1-he6710b0_7
# binutils_linux-64 conda-forge/linux-64::binutils_linux-64-2.33.1-h9595d00_17
# brotlipy conda-forge/linux-64::brotlipy-0.7.0-py37h516909a_1000
# bwidget conda-forge/linux-64::bwidget-1.9.14-0
# gcc_impl_linux-64 pkgs/main/linux-64::gcc_impl_linux-64-7.3.0-habb00fd_1
# gcc_linux-64 conda-forge/linux-64::gcc_linux-64-7.3.0-h553295d_17
# 獲取所有包的名字
grep '::' a | sed 's/.*:://' | sed 's/$/.tar.bz2/'
# 手動(dòng)安裝
for i in `grep '::' a | sed 's/.*:://' | sed 's/$/.tar.bz2/'`; do conda install --offline /anaconda3/pkgs/$i; done使用conda-pack直接從已經(jīng)安裝好的地方拷貝一份
安裝conda-pack
conda install -c conda-forge conda-pack
# pip install git+https://github.com/conda/conda-pack.git打包已經(jīng)安裝好的環(huán)境
conda pack -n my_env_name -o my_env_name.tar.gz拷貝打包好的環(huán)境my_env_name.tar.gz到目標(biāo)機(jī)器,并解壓到任何目錄,一般推薦放到envs目錄下 (anaconda_root/envs)。(注意:anaconda_root改為自己的conda安裝路徑。)
# 解壓打包好的環(huán)境
# 默認(rèn)是全都解壓到當(dāng)前目錄,場(chǎng)面很壯觀
# -C 一定要指定
mkdir -p anaconda_root/envs/my_env
tar -xzf my_env.tar.gz -C anaconda_root/envs/my_env
# 激活環(huán)境
source my_env/bin/activate
# Unpack
conda-unpack
# 至此環(huán)境就完全拷貝過來了
# 去激活
source deactivate目前在同樣的操作系統(tǒng) (Centos)測(cè)試可以通過,不同操作系統(tǒng)如centos-ubuntu尚未測(cè)試,各位可以測(cè)試下提供下反饋。
References
https://www.anaconda.com/blog/how-we-made-conda-faster-4-7
https://github.com/bioconda/bioconda-recipes/issues/13774
https://github.com/TheSnakePit/mamba
https://medium.com/@marius.v.niekerk/conda-metachannel-f962241c9437
https://www.anaconda.com/blog/understanding-and-improving-condas-performance
https://conda.github.io/conda-pack/
封面來源于:https://pixabay.com/photos/motivational-quote-try-and-stop-me-3403638/
往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)
后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集




























