使用singularity本地部署wandb

2023-09-18 16:12:37

1. 背景:

wandb self-host(本地部署)官网只支持docker,而不支持singularity,但是现在部分高校或者企业在集群上完全使用singularity替代docker (原因:docker可以挂载任意目录,而容器内是root权限,导致容器外对文件设置的权限,在容器内完全是无用的,因为root用户可以访问修改任意文件,从而很容易hack宿主机)

2. 解决办法

本教程要求用户必须有singularity的fakeroot权限或者已经在sudo组!!!
如果所属企业或者高效连fakeroot权限都不给,那确实无解

废话不多说,直接上代码

2.1 根据singularity官网命令,将docker镜像转换为sig镜像

singularity build --sandbox  wandb_sig/  docker://wandb/local:latest

# 备选方案:如果提示无法访问hub.docker.io, 则需要间接处理
# 1. 找一台有docker的电脑
# 2. 拉去wandb/local镜像
docker pull wandb/local
# 3. 将镜像保存为tar包
docker save -o wandb_latest.tar wandb/local
# 4. 将tar包复制到安装singularity的机器上
# 5. build 镜像
singularity build --sandbox  wandb_sig/ docker-archive://wandb_latest.tar

2.2 接着创建挂载目录(用于将容器内产生的文件备份到宿主机)

# 假设挂载路径为/path/to/vol
mkdir /path/to/vol # 挂载路径
chmod 777 vol # 权限必须转换为777

# 如果已经存在挂载目录,并且该目录为启动docker容器时使用的目录,需要将目录权限修改为777

2.3 启动容器

# 启动容器, -f 为fakeroot权限, -w 为 修改镜像的权限, --net***为端口映射,容器名为wandb
singularity instance start -f -w  --net --network-args "portmap=port:8080/tcp" --env HOST=http://ip_or_domain_name:port --bind /path/to/vol:/vol wandb_sig wandb

2.4 修改相关目录的权限

# 进入容器
singularity shell --writable-tmpfs instance://wandb

# 挂载路径内的owner和grouper修改,owner要改成wandb,grouper要改为root
chmod -R wandb:root /vol/*

# 部分目录也需要修改,直接copy就行 (uid:999 就是wandb, gid:0 就是root)
chown -R wandb:0  /etc/logrotate.d /etc/my_init.d /etc/nginx /etc/service /etc/container* /var/app
chown -R root:mail /var/mail
chown -R root:staff /var/local
chown -R wandb:root /tmp/GORILLA_STARTED_UNIX_TIME /tmp/load_env_output

# 下面这两行是为了让root用户可以无密码登录,docker容器默认就可以实现这一点
echo "[mysqld]" >> /etc/mysql/my.cnf
echo "skip-grant-tables" >> /etc/mysql/my.cnf

# 修改完成后退出即可
exit

2.5 启动wandb服务 – 转换成singularity后不会自动启动容器内的服务(比如网页,mysql,minio存储等)

# 进入容器
singularity shell --writable-tmpfs instance://wandb
# 切换到wandb用户,启动服务
su wandb
/sbin/my_init

# 我目前还不知道singularity如何在不结束当前运行进程的情况下,退出terminal
# 我选取的方法是直接关掉终端,这样可以保证容器内的进程不被kill
# 启动新的终端,在宿主机内测试是否可以访问到网页:
curl http://localhost:port  # 或者 wget http://localhost:port
# 如果可以正常访问,则已经成功95%啦

2.6 最后一步,端口映射

singularity 暴露的端口只能在宿主机上访问,无法在外网访问,如果需要外网访问,需要使用做一次代理
ssh -CfNg -L external_port:127.0.0.1:port username@locahost -i ~/.ssh/id_rsa
external_port是外网访问时的端口, port为 singularity容器启动时映射的端口,这两个值不能一样,端口值大于1024即可, 比如 port 为 9998,external_port为 9999

该命令的作用时,当访问本机的external_port时,将数据转发到本机的port端口

目前该命令需要使用密钥登录账户,如果只能使用密码登录,需要百度一下。

外网访问 http://xxx:external_port 就可以成功访问啦。

如有任何问题,欢迎留言讨论!!!

更多推荐

什么是单页面应用(SPA)?它们的优点和缺点是什么?

聚沙成塔·每天进步一点点⭐专栏简介⭐什么是单页面应用(SPA)?⭐SPA的优缺点是什么?⭐SPA中如何处理搜索引擎优化(SEO)?⭐什么是前端路由(Front-endrouting)在SPA中的作用是什么?⭐SPA中如何处理浏览器历史记录和页面刷新?⭐SPA通常使用哪些前端框架或库来简化开发?⭐写在最后⭐专栏简介前端入

WebGL笔记: 2D和WebGL坐标系对比和不同的画图方式, 程序对象通信,顶点着色器,片元着色器

WebGL坐标系canvas2d画布和webgl画布使用的坐标系都是二维直角坐标系,但它们坐标原点、y轴的坐标方向,坐标基底都不一样canvas2d坐标系的原点在左上角,x轴朝右,y轴朝下1个单位的宽就是一个像素的宽,1个单位的高就是一个像素的高,都是按像素来走webgl坐标系的原点在画布中心,x轴朝右,y轴朝上1个单

在线客服系统品牌排行榜

客服系统是针对企业和组织的客户服务领域开发和提供的一种信息化系统。它可以帮助企业更好地管理与顾客之间的沟通、反馈和服务等。随着互联网技术和人工智能技术的不断发展,市场上的客服系统产品越来越多,如何选择一款适合自己的产品成为众多企业和组织面临的问题。今天,我们为大家提供客户服务系统排行榜热门品牌榜,为大家在做选择时提供可

LeetCode 1588. Sum of All Odd Length Subarrays

Givenanarrayofpositiveintegersarr,returnthesumofallpossibleodd-lengthsubarraysofarr.Asubarrayisacontiguoussubsequenceofthearray.Example1:Input:arr=[1,4,2,5,3]Ou

ACT汽车电子与软件技术周回顾 | 龙智技术专家分享汽车行业中版本控制与静态扫描的最佳实践

在2023ACT汽车电子与软件技术周期间,我们对话了龙智资深顾问、技术支持部门负责人李培,他聚焦结合行业趋势、自身经验与过往成功案例,分享了版本控制与静态代码扫描在汽车行业中的应用与实践。此外,还对比分析了包括Git、SVN等的多款工具,为大家提供帮助与参考。对话龙智技术负责人、“TechnicalHero”李培,探索

springboot和vue:五、RESTful服务+HTTP状态码+swagger配置

RESTfulRESTful的特点每一个URI代表一种资源客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:POST用于新建资源(也可以用于更新资源),PUT用于更新资源资源的表现形式是JSON或者HTML。客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请

安全厂商安恒信息加入龙蜥社区,完成 与 Anolis OS 兼容适配

近日,杭州安恒信息技术股份有限公司(以下简称“安恒信息”)签署了CLA(ContributorLicenseAgreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis),并成为龙蜥社区安全联盟(OASA)首批成员单位。安恒信息于2007年创立,秉承着企业使命“构建安全可信的数字世界”,将数字经济安全视

自己动手写数据库:关系代数和查询树执行效率的推导

上几节我们完成了sql解释器的实现。通过解析sql语句,我们能知道sql语句想做什么,接下来就需要执行sql语句的意图,也就是从给定表中抽取所所需要的数据。要执行sql语句,我们需要了解所谓的“关系代数”,所谓代数本质上就是定义操作符和操作对象,在关系代数里,操作符有三种,分别为select,project和produ

什么是BI报表?

文章目录出现背景BI商务智能报表BI和报表的区别从功能看从平台看从开发过程看BI报表的好处出现背景对现代企业而言,数据分析的重要性已越来越明显。但对于日渐复杂的数据来说,使用excel处理已然不能满足解决问题的需要,同时效率也不高,于是诞生了BI,businessintelligence商务智能,也相应出现了报表。BI

RS485以及MODBUS学习

学习目的:1、什么是485?2、485如何通信?3、如何使用熟能生巧?RS485是一种四总线通信,分别是VCC、GND、485_A、485_B。两根负责通信,两根负责进行供电。RS485通信硬件层:解决的是数据传输问题,也就是如何将“0”和“1”传输到另外一端设备。软件层:ModBus协议则是解决数据传输的含义和意义那

云原生架构

云原生架构一、Docker1.1镜像仓库dockerhub1.2镜像操作下载:dockerpull镜像(nginx、redis)直接下载是该工具的最新版本,可以指定通过镜像名:版本来指定版本。删除:dockerrmi镜像名:版本号(默认lastest)/镜像id1.3容器操作1.3.1运行镜像:dockerrun[op

热文推荐