本篇文章聊聊正在公开测试的平台,无问芯穹的 MaaS 服务,包含了平台使用体验和一些小技巧。

因为测试给的免费卡时比较少,估计想完成完整测试或许需要一些时间,额外用一些账号进行。就先记录下常规折腾过程吧,让再次“复现”的时候能节约一些时间。

写在前面

上周末去苏州参加 CCF 的会议,回来的路上收到了朋友转发的内容,说有一个新的平台正在开放公测。虽然平台宣传公测的是模型服务(模型 API),但是网站上的“一站式平台”(AI Studio)反而吸引到了我的注意力,如果能在上面直接跑跑最近出的新模型,岂不妙哉。

开始折腾。

第一步:创建账号,登录平台

首先访问 “AI 平台” 的链接,使用手机号注册一个账号。目前没有实名认证,哪怕使用小号注册也问题不大。

注册完毕,登录账号,能够进入 AI 平台的控制台,目前版本的界面比较简单,和绝大多数现有平台类似,不过从数据概览的设计中能够看到是有多人协作(共享资源)的设计的。

无问芯穹 AI Studio 默认界面

平台网站从 IP 推测应该部署在阿里云北京,所以虽然前端没有做优化,访问起来也还蛮快的。

第二步:创建 GPU 主机

虽然目前左侧菜单栏有三种可玩的模式:“开发机(虚拟机)”、“任务(训练任务)”、“推理服务(Docker 推理容器)”,但如果你想稍微深度的使用平台。暂时只有选择第一项。

主要原因是,目前平台有白名单机制,非申请用户是无法直接获取公网 IP 访问能力的。所以,即使你训练模型结束,能够在推理服务使用自己的模型或者直接在推理服务页面,使用平台预先提供的模型,也无法访问和测试模型的具体状况,毕竟同一时间只允许使用一张卡(暂时不能无卡启动容器,来作为测试机)。

既然另外两条路不通,那么我们就选“创建开发机”吧。

创建开发机,选择机型和镜像

虽然平台列举了 A100 单卡到 8 卡的选项,但是目前其实只有单卡机器能够被选择使用。建议平台隐藏掉其他机型,页面默认勾选可选择机型,操作体验可以更好一些。为了避免环境干扰,我一般会选择基础镜像,比如 Ubuntu。平台自带的 Ubuntu 版本稍低了些,去年3月就停止了一般性更新,如果有可能提供 22.04 LTS 或许会更好一些,用户安装软件也可以省去很多麻烦,持续使用的安全性也更有保障。

启动容器支持,填入 RSA 密钥

在选择好基础镜像后,添加我们自己的 RSA 密钥,然后给主机起个名字,点击创建主机即可。诸如存储相关的创建主机选项,目前并不支持配置,估计后续官方需要上线一个“存储池”的选项,让大家能够使用文件存储协议来传数据,比如 “FTP / WebDav / S3 / HTTP” 这类常规玩法。

小技巧:突破官方限制,调大共享内存

官方页面中,前端“锁死”了共享内存的容量,默认数值是主机的容量的一半:56GB。但是对于用户来说,只能用一半资源不是太浪费了嘛。

我们通过删除页面输入框元素上的 “Disable” 属性,来把资源设置为 100GB。(给系统留 12G 足够用了)

修改内存配额,创建失败

但是,当我们创建的时候,发现系统弹出了后端接口的序列化报错。嗯,无问芯穹的平台是用 Golang 写的啊,具备基础的数值校验,ApiPlatformUserV1InstanceCreateReq.shared_mem 这个字段需要是数值类型,前端默认传递的是字符串。那么,看起来这个接口应该是没有被真正调用过,而这种情况下,一般接口有可能都是可以工作的。

手动构造请求,创建资源

于是,手动创建一个请求,将请求中的字段类型从字符串改成数字,提交请求,接口返回资源创建任务正常执行。

刷新列表,资源创建成功

因为我是在凌晨进行测试,资源显然是充足的(目前应该测试用户也不多),所以当我返回开发机列表页面后,稍等十几秒,一个 100GB 共享内存的,能够使用 Docker 的开发机就创建完毕啦。

推测大概率使用了 DinD 来使用 Docker。或许,这个模式下存储共享需要做比较多的约定和 Coding 工作,这也可能也是官方尚未支持存储功能的原因之一。

第三步:使用 SSH 来访问主机

如果你从上面的列表页面直接点击登录,那么你将打开一个基于 xterm.js 构建的前端 SSH 页面。

默认的 Web SSH 界面

因为平台刚刚建立不久的缘故,支持功能非常少,不能够在页面传递文件,加上默认情况下主机也并未开放常见端口,我们想跑个带有界面的 Chat Bot 或者 Stable Diffusion WebUI 也会比较麻烦。

所以,我个人推荐别点页面的“登录”按钮。点击“三个点”在下拉菜单中选择“详情”,进入示例详细资料页面。

创建资源的详细情况

然后在详情页面中,我们能够看到 “SSH 登录方式”。我这里的登录命令是:

ssh -p 40490 soulteary@111.51.90.14

不知道端口是随机的,还是玩梗“404、4090”。从 IP 地址可以看出机器使用的是宁夏银川的移动出口的资源。不知道还有多少人记得这个宁夏算力枢纽节点(全国8个国家算力节点),去年城市提出的口号“打造算力之都做强做大数字经济”,有披露不少数据,等今年年底的时候再看看,到时候对比下。

使用 SSH 登录主机 (1/2)

使用页面提供的命令,我们顺利登录主机。

使用 SSH 登录主机 (2/2)

第四步:快速测试平台容器环境

想要快速测试模型容器,最简单的方案就是使用官方已经测试过的模型镜像啦。但是目前平台并没有提供带有模型的镜像列表。没关系,继续自助餐流程。

返回主页,找到“推理服务”,然后“尝试”创建一个推理服务。

选择一个预置的模型镜像

这里我们并不是真的创建,因为一来创建资源的测试额度不足,二来我们只是来推理服务中获取镜像名称的。

获得完整镜像名称

当我们选定镜像后(我这里选择的是小巧玲珑的 QWen 0.5B,但其实镜像尺寸有 31G),将鼠标放在镜像下拉列表上,就能够得到完整的镜像地址啦。

得到地址后,自然是在 SSH 中输入下面的命令,把官方预置镜像下载到主机中啦:

docker pull cr.infini-ai.com/infini-ai/qwen1.5-0.5b-chat:v1-vllm0.3-torch2.1-cuda12.3-ubuntu22.04

因为镜像比较大(31G),所以我们下载完毕、容器本地解压缩镜像需要接近 10 分钟。因为我测试了两次,所以白白消耗了测试额度中的 20 分钟。这里如果官方团队能够将常用模型或者环境直接在“开发机”共享存储中提供会方便和节约很多时间。

在运行容器之前,我们需要参考一处文档中的说明,否则想使用容器提供的默认的 entrypoint.sh 程序,启动符合 OpenAI 接口格式的程序是不行的。

文档中的关键参数

文档中的参数(环境变量)配置如下:

export MODEL=qwen1.5-0.5b-chat
export TP=1
export LOG=1

# 模型已经放在 /app/model/${MODEL}
/app/entrypoint.sh

为了让容器正确跑起来,我们需要编写如下命令:

docker run -it -p 8000:8000 -e MODEL=qwen1.5-0.5b-chat -e TP=1 --gpus=all -v=/mnt:/mnt cr.infini-ai.com/infini-ai/qwen1.5-0.5b-chat:v1-vllm0.3-torch2.1-cuda12.3-ubuntu22.04

容器服务正确启动

图片中服务启动命令的端口是 21002 (受到容器输出日志误导),实际执行需要使用上面提到的 8000 端口。建议官方把日志显示的真实服务端口 21002 日志注释掉,避免干扰开发者。

启动服务后,我们再打开一个 SSH 终端,然后输出下面的命令,就能够测试容器服务啦。

调用模型接口

测试命令代码如下:

curl http://0.0.0.0:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen1.5-0.5b-chat",
        "messages": [
            { "role": "user", "content": "无问芯穹公司介绍" }
        ]
    }'

我连续调用了几次模型,输出结果如下:

服务实际响应结果

调用体感来看,基本是实时输出结果,虽然我使用的模型比较小(0.5B的官方镜像),但是实时出整段结果还是蛮爽的。

其他:碎碎念

第一篇相关的测试就到这里啦,因为当我想继续测试的时候(第二次复现)。平台测试赠送额度使用完毕了,就实际体验来看,应该是新用户每人赠送一小时 A100 卡时(大概 6~8 块钱)。

等有空的时候,再进行其他的测试,比如各种平台的联通性、模型下载和上传速度、最常规的 finetune 时间是否有加速,以及平台目前没有涉及,但是大家都玩的比较熟悉的 Stable Diffusion 相关的跑图和炼丹。

毕竟有了 SSH ,其实我们就可以无障碍访问 Web 服务了嘛。

最后

个人感觉相比较海外学者创业,无问芯穹的环境显然不够有优势。但是依旧希望汪老师带队的,这只擅长硬件能力的,在一种软件局面下显得“相对小众”创业公司能够在中国的 AI 创业史上落下惊鸿一笔。

产品嘛,还在内测,在让子弹飞一飞吧。

–EOF