在开发机中使用 Conda
本文主要介绍如何在开发机中使用镜像自带的 Conda 环境。
镜像自带 vs 自行安装
智算云平台预置了基于 Ubuntu、CentOS 的多种基础镜像和第三方镜像,绝大部分已自带 Miniconda,一般在 /usr/local/
下的目录。
如果使用预置镜像,不妨使用镜像自带 Miniconda,免去自行下载安装的麻烦。镜像自带 Miniconda 一般在 /usr/local
目录下。
以下内容无特殊说明,均为镜像自带 Miniconda,使用 root
用户。
SSH 远程终端中使用 Conda
完成 SSH 远程登录后,可查看当前环境下可否直接使用 conda
:
which conda
期待结果是输出类似下方的 Conda 安装路径:
/usr/local/miniconda3
NOTE
如果 which conda
输出路径,则说明镜像自带 Miniconda 直接可用,可正常使用 conda
命令,请跳过该部分剩余内容。
如果 which conda
没有输出,有可能是环境变量缺失,或镜像中未自带 Conda。
先尝试查找 Miniconda 安装路径:
find / -name "miniconda*"
# 或只查目录,且排除错误输出
find / -type d -name "miniconda*" 2>/dev/null
如果 find
命令找到了 Miniconda,则会输出类似下方的安装路径:
/usr/local/miniconda3
如果未输出类似路径,则说明镜像中不包含 Miniconda,您需要自行安装。如果输出类似路径,说明只是未初始化 Conda 环境。执行以下步骤,手动初始化 Conda 环境:
# 临时设置环境变量,请根据 conda 路径调整下方命令
export PATH="/usr/local/miniconda3/bin:$PATH"
# 初始化 Conda 环境
conda init
conda init
是 Conda 官方推荐的设置方法,会自动处理所有必要的配置,修改会被持久化到 .bashrc
中。
如此处理完之后,根据提示退出重新登录,即可使用 conda
命令。
Web Terminal 中使用 Conda
在 Web Terminal 中使用镜像自带 Conda 可能会遇到权限问题。如开发机中从未初始化 Conda 环境,请先完成初始化,再参考后续的解决方案。
初始化 Conda
先尝试直接运行 which conda
,确定镜像中已包含 Conda 环境。如果输出路径,说明当前环境下 Conda 可用。
如果未输出路径,可尝试初始化 Conda 环境:
conda init
根据 conda init
提示退出重新登录,即可使用 conda
命令。如果提示找不到 conda
命令,则说明镜像中不包含 Conda 环境。
NOTE
conda init
是 Conda 官方推荐的设置方法,会自动处理所有必要的配置,修改会被持久化到 .bashrc
中。
常见问题
修改默认 Conda 源为清华镜像源
由于国内网络问题,可能无法访问 Conda 自带源,或访问速度极慢。因此,建议使用国内镜像源,如清华镜像源。
下面示例使用 cat
命令直接追加写入了 ~/.condarc
,请注意勿重复添加。
# 添加清华镜像源。
cat << EOF >> ~/.condarc
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
nvidia: https://mirrors.sustech.edu.cn/anaconda-extra/cloud
EOF
然后清除相关缓存:
conda clean -i
conda clean -p
conda clean -a
无法激活 Conda 环境
从 Web Terminal 登录开发机,使用 which conda
验证已安装 Miniconda,已有 base 环境,但直接运行 conda activate base
会报错(激活其他环境也会报错),提示需要先运行 conda init
。
conda init
命令用于初始化 Conda,主要是为了配置用户的环境,以便 Conda 命令能够在用户的 shell 中正确运行。
运行 conda init
命令,初始化 Conda 环境,并重启终端。
非 root 用户的文件路径权限问题
TIP
AIStudio 开发机已变更为默认使用 root
账号登录。部分旧版开发机仍默认使用非 root
账号,重启后可自动更新。不需要使用以下方案解决非 root
用户权限问题。
非 root
用户使用镜像自带 Miniconda 可能会遇到文件读写权限问题。
镜像自带 Miniconda 一般在 /usr/local
目录。可通过以下命令查看 Miniconda 使用的路径:
conda info
开发机 Web Terminal 环境特殊,暂时使用 conda create
会遇到文件权限错误,无法简单通过 sudo
提升至 root 权限解决问题。如果对从 Web Terminal 使用 Conda 命令有强需求,请参考下文推荐方案一/方案二。
方案一 修改 pkgs 路径
在 Web Terminal 执行 conda create
时,默认会以 /usr/local
下的子目录作为 pkgs 路径,遇到权限不足的问题时,会直接报错。
因此,可以修改 conda
配置,将 pkgs 路径修改为 ~/.conda/pkgs
,这样就可以避免文件权限问题。
# 创建 pkgs 目录
mkdir -p ~/.conda/pkgs
# 修改 .condarc 配置
conda config --add pkgs_dirs ~/.conda/pkgs
# 检查 conda 配置是否成功,输出 pkgs 路径如果只有 1 个,则说明配置成功
conda config --show-sources
配置完毕后,conda create
命令即可正常执行。
方案二 自行安装 Miniconda
您也可以放弃使用镜像自带 Miniconda,自行安装理想的 Conda 环境。自行安装的 Conda 默认在用户目录下,一般不会遇到权限问题。
安装 Miniconda
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
初始化 Miniconda
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
非 root 用户无法创建 Conda 环境
TIP
AIStudio 开发机已变更为默认使用 root
账号登录。部分旧版开发机仍默认使用非 root
账号,重启后可自动更新。不需要使用以下方案解决非 root
用户权限问题。
从开发机的 Web Terminal 登录,使用 conda create
命令创建 Conda 环境,会直接报错。这是因为开发机的 Web Terminal 环境特殊,暂时无法直接支持使用 conda create
。
遇到这类错误,请参考上文 非 root 用户的文件路径权限问题 部分的解决方案。
Ubuntu 报错示例:
demo@is-c7w2uhk76efvlcfa-devmachine-0:~$ conda create -n fromwebterm python==3.12.4
Channels:
- defaults
Platform: linux-64
Collecting package metadata (repodata.json): failed
NotWritableError: The current user does not have write permissions to a required path.
path: /usr/local/miniconda3/pkgs/cache/47929eba.json
uid: 30508
gid: 0
If you feel that permissions on this path are set incorrectly, you can manually
change them by executing
$ sudo chown 30508:0 /usr/local/miniconda3/pkgs/cache/47929eba.json
In general, it's not advisable to use 'sudo conda'.
demo@is-c7w2uhk76efvlcfa-devmachine-0:~$
CentOS 报错示例:
[zhaoyinghao@is-c7wqsja2wznj73pe-devmachine-0 ~]$ conda create -name web python==3.12.4
Collecting package metadata (current_repodata.json): failed
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/exception_handler.py", line 16, in __call__
return func(*args, **kwargs)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/cli/main.py", line 84, in main_subshell
exit_code = do_call(args, p)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/cli/conda_argparse.py", line 126, in do_call
return getattr(module, func_name)(args, parser)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/notices/core.py", line 123, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/cli/main_create.py", line 46, in execute
install(args, parser, "create")
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/cli/install.py", line 309, in install
unlink_link_transaction = solver.solve_for_transaction(
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/solve.py", line 153, in solve_for_transaction
unlink_precs, link_precs = self.solve_for_diff(
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/solve.py", line 214, in solve_for_diff
final_precs = self.solve_final_state(
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/solve.py", line 357, in solve_final_state
ssc = self._collect_all_metadata(ssc)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/common/io.py", line 83, in decorated
return f(*args, **kwds)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/solve.py", line 571, in _collect_all_metadata
index, r = self._prepare(prepared_specs)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/solve.py", line 1285, in _prepare
reduced_index = get_reduced_index(
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/index.py", line 286, in get_reduced_index
new_records = SubdirData.query_all(
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/core/subdir_data.py", line 123, in query_all
create_cache_dir()
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/gateways/repodata/__init__.py", line 994, in create_cache_dir
mkdir_p_sudo_safe(cache_dir)
File "/usr/local/lib/miniconda3/lib/python3.9/site-packages/conda/gateways/disk/__init__.py", line 87, in mkdir_p_sudo_safe
os.mkdir(path)
PermissionError: [Errno 13] Permission denied: '/usr/local/lib/miniconda3/pkgs/cache'
`$ /usr/local/lib/miniconda3/bin/conda create -name web python==3.12.4`
environment variables:
CIO_TEST=<not set>
CONDA_DIR=/usr/local/lib/miniconda3
CONDA_EXE=/usr/local/lib/miniconda3/bin/conda
CONDA_PYTHON_EXE=/usr/local/lib/miniconda3/bin/python
CONDA_ROOT=/usr/local/lib/miniconda3
CONDA_SHLVL=0
CURL_CA_BUNDLE=<not set>
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/gcc/lib64:/usr/local/gcc/lib::/usr/lo
cal/lib
LD_PRELOAD=<not set>
LIBRARY_PATH=/usr/local/cuda/lib64/stubs
PATH=/usr/local/lib/miniconda3/condabin:/usr/local/cuda/bin:/usr/local/gcc/
bin:/usr/local/lib/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/
sbin:/usr/bin:/sbin:/bin:/home/zhaoyinghao/.local/bin:/home/zhaoyingha
o/bin
REQUESTS_CA_BUNDLE=<not set>
SSL_CERT_FILE=<not set>
active environment : None
shell level : 0
user config file : /home/zhaoyinghao/.condarc
populated config files :
conda version : 23.5.0
conda-build version : not installed
python version : 3.9.12.final.0
virtual packages : __archspec=1=x86_64
__cuda=12.2=0
__glibc=2.17=0
__linux=5.15.0=0
__unix=0=0
base environment : /usr/local/lib/miniconda3 (read only)
conda av data dir : /usr/local/lib/miniconda3/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /usr/local/lib/miniconda3/pkgs
/home/zhaoyinghao/.conda/pkgs
envs directories : /home/zhaoyinghao/.conda/envs
/usr/local/lib/miniconda3/envs
platform : linux-64
user-agent : conda/23.5.0 requests/2.27.1 CPython/3.9.12 Linux/5.15.0-113-generic centos/7.9.2009 glibc/2.17
UID:GID : 30509:0
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
If submitted, this report will be used by core maintainers to improve
future releases of conda.
Would you like conda to send this report to the core maintainers? [y/N]: n
No report sent. To permanently opt-out, use
$ conda config --set report_errors false
[zhaoyinghao@is-c7wqsja2wznj73pe-devmachine-0 ~]$