容器类应用常见问题¶
使用访问入口¶
对于容器类应用所提交的作业,可能会预留有访问入口以便交互操作,如通过 ssh 连接容器终端,请参考 访问入口使用。
设置网络代理¶
容器作业内如果需要访问互联网,需设置访问代理。可通过以下几种方式进行配置:
通过环境变量¶
我们推荐直接通过设置环境变量的方式来设置网络访问代理,您在需要联网行时加载环境变量脚本即可:
source /app/bin/proxy.sh
小心
环境变量仅在当前 shell 中生效,每次您重新创建一个新的 shell (例如 ssh 登陆),都需要重新加载环境变量。
通过 module¶
如果容器中有 module 命令,您也可以尝试通过 module 命令来加载网络代理。
# 可能需要先加载模组列表
module use /app/ubuntu/modulefiles # ubuntu为基础的镜像
module use /app/centos/modulefiles # centos为基础的镜像
# 加载上网代理
module load proxy
成功加载网络代理后,将能够访问互联网。部分应用可能需要在其配置文件中另行配置,请参阅应用的说明。
小心
建议用户仅在需要设置代理时加载代理设置,并且在使用完代理后,立即取消代理,否则可能会造成 tensorflow 等应用无法正常运行。使用下列命令来取消代理:
module unload proxy
容器内互联网可访问性判断¶
警告
ping 命令不走 HTTP 代理,即使设置网络代理亦无法使用,请勿使用 ping 命令进行测试。
用户登录作业后,若未设置网络代理,默认情况下无法访问互联网。如下:
通过 设置网络代理 后才可正常访问互联网。用户可通过以下方式进行判断:
检查网络代理是否设置成功
echo $http_proxy echo $https_proxy
测试能否访问互联网
# 若容器内安装有 curl 可通过 curl 进行测试 curl [url] # 若容器内未安装有 curl,可通过 wget 进行测试 /app/bin/busybox wget [url] -O -
容器内数据上传下载¶
对于运行中的容器作业,平台支持使用常见的 SSH 工具进行数据的上传和下载,推荐使用 Xftp 或 WinSCP 工具。
小技巧
若数据量巨大,可在作业运行前使用硬盘挂载的方式进行数据上传和下载(需联系技术支持人员进行硬盘挂载)。
Xftp 的配置和使用请参考 Xftp 章节。
下面是使用 WinSCP 工具进行数据上传和下载示例。
首先在 作业详情 的 SSH 访问入口查询远程登录的作业ID、代理域名、代理入口UUID,如下图所示:
打开 WinSCP 工具,点击 “标签页” \(\rightarrow\) “新标签页” 打开 “登录” 弹窗,选择左侧 “新建站点” 选项,在右侧 “会话” 区域按如下方式填写:
“文件协议” 处选择
SFTP“主机名” 处填写
作业ID“端口号” 处填写
22“用户名” 处填写
星光用户名“密码” 处填写
星光平台登录密码
如下图所示:
然后点击 “高级” 按钮,在弹出的 “高级站点设置” 窗口中选择左侧 “连接” 下的 “隧道” 选项,勾选 “通过 SSH 隧道进行连接” 选项,并按如下方式填写:
“SSH 主机” 处填写
代理域名“SSH 端口” 处填写
8022“SSH 用户名” 处填写
入口UUID
如下图所示:
完成上述设置后,点击 “确定” 返回 “登录” 窗口,点击 “登录” 即可连接到作业容器中进行数据的上传和下载。
在 WinSCP 中,左侧窗口为本地文件系统,右侧窗口为远程作业容器中的文件系统。您可以通过拖拽的方式在两侧窗口中进行数据的上传和下载,如下图所示:
如何在容器中安装软件¶
pip 安装用户 python 包¶
用户直接使用 pip 命令进行 python 包的安装时,安装会失败。若要在星光平台进行用户自定义 python 包安装时需要按照以下几个步骤进行:
使用包含有 pip 的镜像环境或加载包含 pip 命令的相关 module
按照 设置网络代理 一节设置好网络代理
带上 user 参数使用 pip 命令,如:
pip install -user xxx
下图演示了使用 pip 安装 scapy 的步骤:
从源码安装软件¶
当用户在作业容器中编译安装其他第三方软件时,可以选择编译安装模式。
对于支持编译安装的软件,其官方源码通常会提供相应的配置选项。大多数官方源码都会包含一个 configure 脚本。在编译之前,可以在源码目录下使用以下命令来列出可用的配置选项:
./configure --help
如果该脚本提供了 --prefix 选项,则可以使用以下命令指定安装目录:
./configure --prefix=/fs/user/dir
设置完成后再执行安装命令 make install 则可将软件安装到用户指定的目录中。
小心
每个软件包的编译部署方法可能不同,强烈建议首先查看各软件的安装指引文件。
用户身份使用包管理器安装软件¶
用户在容器中仅具备普通身份(星光账号)权限,如果使用镜像内默认包管理器 apt、yum 等包管理器,将会由于没有管理员权限而失败。此时,可以使用 /app/ubuntu/bin/apt-get 和 /app/centos/bin/yum 代替。
例如,要在基于 ubuntu 的容器中安装 vim ,请执行:
/app/ubuntu/bin/apt-get update
/app/ubuntu/bin/apt-get install -y vim
若要在基于 centos 的容器中安装 wget ,请执行:
/app/centos/bin/yum install -y wget
备注
这种安装方法需要对待安装的程序进行额外处理,可能在一些特殊情况下导致安装失败或程序运行异常。在这种情况下,建议您尝试 构建自定义的镜像 解决问题。
SSH 连接不稳定¶
当通过 SSH 或基于 SSH 的工具(如 VSCode )连接容器作业时,如果遇到连接在闲置几分钟后自动断开的问题,您需要配置 SSH 定期发送心跳包以维持连接。
心跳包的发送可以在客户端(您的电脑)或服务端中任一端进行配置。我们推荐您修改本地客户端的配置。
修改客户端配置¶
客户端的配置通常是一个名称为 config 的文件。在 Linux 和 MacOS 下,它位于:
~/.ssh/config(用户个人配置文件)/etc/ssh/ssh_config(系统全局配置文件)
在 Windows 下,它位于:
%USERPROFILE%\.ssh\config(用户个人配置文件)%ALLUSERSPROFILE%\ssh\ssh_config(系统全局配置文件)
备注
用户个人配置文件仅对用户本身生效,系统全局配置文件则对所有用户生效。
为了修改客户端配置,使其定期发送心跳包,您可以在上述任意一个配置文件的开头中添加以下内容:
Host *
ServerAliveInterval 60 # 发送心跳包的间隔,单位为秒
ServerAliveCountMax 3 # 可以接受的心跳包发送失败次数
其中 ServerAliveInterval 和 ServerAliveCountMax 的值可以根据您的网络环境进行调整。
仅修改单个连接的配置
在某些情况下,您可能希望仅针对指定连接修改配置,例如针对 proxy.nscc-gz.cn 域的连接:
Host proxy.nscc-gz.cn
HostName proxy.nscc-gz.cn
Port 8022
User [your_username]
ServerAliveInterval 60
ServerAliveCountMax 3
修改服务端配置¶
备注
当且仅当您使用自己制作的镜像启动作业时,才可通过修改服务端配置的方式解决连接不稳定问题。
服务端配置通常是一个名称为 sshd_config 的文件,您可以修改您镜像中的 /etc/ssh/sshd_config 文件,调整其中的 ClientAliveInterval 和 ClientAliveCountMax 以设置心跳包发送频率。
PyCharm 远程 IDE 后端下载安装常见错误¶
在使用 PyCharm 远程开发功能连接容器作业时,PyCharm 会在容器中下载并安装 IDE 后端程序,在下载安装过程中可能会遇到以下报错:
无法访问互联网¶
出现上图报错是因为 PyCharm 与容器作业建立远程连接时,会在容器中先下载 IDE 后端程序,但是容器环境内没有直接访问互联网的能力,因此必须先将集群上网代理配置进容器中,然后才能正常下载 IDE 后端程序。请参考 PyCharm 连接容器前容器内互联网代理配置 进行配置解决。
缺少 HTTPS 根证书¶
出现上图报错是因为容器系统里缺少合法的 HTTPS 根证书,curl 无法验证下载站点的身份合法性,为了安全主动终止了下载。该问题一般和镜像相关:部分精简的定制镜像为了压缩体积,没有安装 ca-certificates 证书包,无法验证 JetBrains 官方 HTTPS 站点的合法性。解决方法有两种:
方法一:安装系统根证书包
请根据容器的操作系统执行对应命令,补全系统根证书:
Ubuntu / Debian 系统
apt-get update apt-get install -y ca-certificatesCentOS / RHEL 系列系统(含 Rocky、AlmaLinux 等)
yum update yum install -y ca-certificates
方法二:用户级跳过证书校验
可以在当前用户目录下配置下载工具默认跳过证书校验,配置后立即生效:
# 配置 curl 默认跳过证书校验
echo "insecure" >> ~/.curlrc
# 配置 wget 默认跳过证书校验
echo "check_certificate = off" >> ~/.wgetrc
小心
对 ~/.curlrc 和 ~/.wgetrc 文件的修改会影响当前集群的所有作业,且跳过证书校验会降低连接安全性。请在 PyCharm IDE 后端下载安装完成后及时移除上述配置:
# 移除 curl 跳过证书校验的配置
sed -i '/^insecure$/d' ~/.curlrc
# 移除 wget 跳过证书校验的配置
sed -i '/^check_certificate = off$/d' ~/.wgetrc