华为云用户手册

  • OBS权限控制模型 OBS提供多种权限控制方式,包括 IAM 权限、桶策略、对象ACL、桶ACL。各个方式说明及应用场景如表1所示。 图1 OBS权限控制方式 表1 OBS权限控制方式说明和应用场景 方式 说明 应用场景 IAM权限 IAM权限是作用于云资源的,IAM权限定义了允许和拒绝的访问操作,以此实现云资源权限访问控制。管理员创建IAM用户后,需要将用户加入到一个用户组中,IAM可以对这个组授予OBS所需的权限,组内用户自动继承用户组的所有权限。 使用策略控制账号下整个云资源的权限时,使用IAM权限授权。 使用策略控制账号下OBS所有的桶和对象的权限时,使用IAM权限授权。 使用策略控制账号下OBS指定资源的权限时,使用IAM权限授权。 桶策略 桶策略是作用于所配置的OBS桶及桶内对象的。桶拥有者通过桶策略可为IAM用户或其他账号授权桶及桶内对象精确的操作权限,桶ACL和对象ACL是对桶策略的补充(更多场景下是替代)。 允许其他华为云账号访问OBS资源,可以使用桶策略的方式授权对应权限。 当不同的桶对于不同的IAM用户有不同的访问控制需求时,需使用桶策略分别授权IAM用户不同的权限。 对象ACL 基于账号或用户组的对象级访问控制,对象的拥有者可以通过对象ACL向指定账号或用户组授予对象基本的读、写权限。 说明: 默认情况下,创建对象时会同步创建ACL,授权对象拥有者拥有对象的完全控制权限。 对象的拥有者是上传对象的账号,而不是对象所属的桶的拥有者。例如,如果账号B被授予访问账号A的桶的权限,然后账号B上传一个文件到桶中,则账号B是对象的拥有者,而不是账号A。默认情况下,账号A没有该对象的访问权限,也无法读取和修改该对象的ACL。 需要对象级的访问权限控制时,桶策略可以授予对象或对象集访问权限,当授予一个对象集权限后,想对对象集中某一个对象再进行单独授权,通过配置桶策略的方法显然不太实际。此时建议使用对象ACL,使得单个对象的权限控制更加方便。 使用对象链接访问对象时。一般使用对象ACL,将某一个对象通过对象链接开放给匿名用户进行读取操作。 桶ACL 基于账号或用户组的桶级访问控制,桶的拥有者可以通过桶ACL向指定账号或用户组授予桶基本的读、写权限。 说明: 默认情况下,创建桶时会同步创建ACL,授权拥有者对桶的完全控制权限。 桶ACL的权限控制粒度不如IAM权限和桶策略,一般情况下,建议使用IAM权限和桶策略进行权限访问控制。 授予指定账号桶读取权限和桶写入权限,用以共享桶数据或挂载外部桶。比如,账号A授予账号B桶读取权限及桶写入权限后,账号B就可以通过OBS Browser+挂载外部桶、API&SDK等方式访问到该桶。 授予日志投递用户组桶写入权限,用以存储桶访问请求日志。
  • 管理个人空间 系统管理员可以管理所有用户的个人空间,部门管理员只能管理本部门用户的个人空间。 使用管理员账号登录KooDrive服务业务面。目前仅支持使用华为账号登录KooDrive服务业务面。 单击页面顶部“管理控制台”。 在左侧导航栏选择“空间管理”,在空间管理界面单击“个人空间”页签,界面展示个人空间列表。 参考表2对个人空间进行管理。 表2 管理个人空间 操作 说明 分配个人空间 在个人空间列表上方下拉列表框中选择用户所属部门,在搜索框中输入用户名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“分配空间”。 在“分配空间”弹框中设置个人空间大小,设置完成后单击“确定”。注意:分配的个人空间大小不能为0GB。 未分配空间的用户,界面才展示“分配空间”操作。个人空间默认展示的空间大小为配置云空间时的个人空间默认大小,管理员可根据下方剩余企业空间大小的提示设置个人空间大小。管理员也可勾选用户名称前的复选框(仅支持勾选一个用户分配空间),单击列表上方“分配空间”进行操作。 修改个人空间 在个人空间列表上方下拉列表框中选择用户所属部门,在搜索框中输入用户名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“修改容量”。 在“修改空间容量”弹框中重新设置用户空间大小,设置完成后单击“确定”。注意:设置的个人空间大小不能小于当前个人空间已使用容量。 管理员可根据下方剩余空间大小的提示重新设置用户空间大小。管理员也可勾选用户名称前的复选框(仅支持勾选一个用户修改空间),单击列表上方“修改容量”进行修改操作。 禁用个人空间 在个人空间列表上方下拉列表框中选择用户所属部门,在搜索框中输入用户名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“禁用空间”。 在“禁用空间”提示框中,了解禁用空间的影响后,如果确认要禁用空间,单击“确定”。 管理员也可勾选用户名称前的复选框,可选择多个,单击上方“禁用空间”批量禁用个人空间。 启用个人空间 在个人空间列表上方下拉列表框中选择用户所属部门,在搜索框中输入用户名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“启用空间”即可启用个人空间。 管理员也可勾选用户名称前的复选框,可选择多个,单击上方“启用空间”批量启用个人空间。 删除个人空间 在个人空间列表上方下拉列表框中选择用户所属部门,在搜索框中输入用户名称,支持模糊搜索。 在搜索结果列表单击中“操作”列“删除空间”。 在“删除空间”弹框中,了解删除空间的影响后。 如果已勾选的空间有资源文件时,在弹框中输入“确定删除”并勾选“我已知悉,强制删除”,然后单击“确定”。 如果已勾选的空间还未分配空间容量或已分配空间容量但空间无文件,单击“确定”。 管理员也可勾选用户名称前的复选框,可选择多个,单击上方“删除空间”批量删除个人空间。 删除空间后将会删除该空间及其名下全部资源,请谨慎操作。建议迁移资源后再进行删除操作。
  • 管理团队空间 系统管理员可以管理所有团队空间,部门管理员只能管理本部门的团队空间。 使用管理员账号登录KooDrive服务业务面。目前仅支持使用华为账号登录KooDrive服务业务面。 单击页面顶部“管理控制台”。 在左侧导航栏选择“空间管理”,在空间管理界面单击“部门空间”页签,界面展示部门空间列表。 参考表1对部门空间进行管理。未分配空间的部门,界面才展示“分配空间”操作。 表1 管理部门空间 操作 说明 分配部门空间 在部门空间列表搜索框中输入部门名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“分配空间”。 在“分配空间”弹框中设置部门空间大小。 单击“仅不可删除”为添加的成员设置初始权限,注意:“仅不可删除”为默认权限设置,不同权限设置会显示不同权限名称。 单击“权限模板”选择已在权限模板中添加的自定义模板或系统预置模板,此外,也可以单击“自定义”来重新设定权限类型。 设置完成后单击“确定”。 注意:部门空间默认展示的空间大小为配置云空间实例时的团队空间默认大小,管理员可根据下方剩余企业空间大小的提示设置部门空间大小。分配的部门空间大小不能为0GB。管理员可勾选部门名称前的复选框(仅支持勾选一个部门分配空间),单击列表上方“分配空间”进行操作。 修改部门空间 在部门空间列表搜索框中输入部门名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“修改容量”。 在“修改空间容量”弹框中重新设置部门空间容量。 设置完成后单击“确定”。 注意:管理员可根据下方剩余企业空间大小的提示重新设置团队空间大小。管理员可勾选部门名称前的复选框(仅支持勾选一个部门修改空间),单击列表上方“修改容量”进行操作。设置的部门空间大小不能小于当前部门空间已使用容量。 权限管理 在部门空间列表搜索框中输入部门名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“权限管理”。 在“权限管理”弹框中可以通过选择权限类型或者输入用户名称快速搜索用户,勾选一个或多个用户,单击“修改权限”按钮。对于单一用户可以单击个人用户的编辑按钮。 单击“权限模板”选择已在权限模板中添加的自定义模板或系统预置模板,此外,也可以单击“自定义”来重新设定权限类型。 完成设置后,单击“确定”。 如果想了解关于权限类型的信息,可以单击界面右上角的“权限说明”查看详情。 禁用部门空间 在部门空间列表搜索框中输入待禁用的部门名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“禁用空间”。 在“禁用空间”提示框中,了解禁用空间的影响后,如果确认要禁用空间,单击“确定”。 注意:禁用部门空间后,部门空间内的资源将暂时冻结,不可访问。管理员可勾选部门名称前的复选框,可选择多个,单击上方“禁用空间”批量禁用部门空间。 启用部门空间 在部门空间列表搜索框中输入待启用的部门名称,支持模糊搜索。 在搜索结果列表中单击“操作”列“启用空间”即可启用部门空间。管理员也可勾选部门名称前的复选框,可选择多个,单击上方“启用空间”批量启用部门空间。 删除部门空间 在部门空间列表搜索框中输入待删除的部门名称,支持模糊搜索。 在搜索结果列表单击中“操作”列“删除空间”。 在“删除空间”弹框中,了解删除空间的影响后。 如果已勾选的空间有资源文件时,在弹框中输入“确定删除”并勾选“我已知悉,强制删除”,然后单击“确定”。 如果已勾选的空间还未分配空间容量或已分配空间容量但空间无文件,单击“确定”。管理员也可勾选部门名称前的复选框,可选择多个,单击上方“删除空间”批量删除部门空间。注意 :删除空间后将会删除该空间及其名下全部资源,请谨慎操作。建议迁移资源后再进行删除操作。
  • 云硬盘扩容问题 云硬盘支持缩容或临时扩容吗 扩容云硬盘和创建新的云硬盘有什么区别 云硬盘扩容后数据是否会丢失 扩容后的云硬盘能否使用扩容前的备份或快照回滚数据 云硬盘扩容后是否需要重启云服务器 云硬盘扩容时需要先卸载吗 扩容后的云硬盘容量大于2TiB该如何处理 怎样为云硬盘的新增容量创建新分区(新增/dev/vdb2分区或E盘) 怎样将云硬盘新增容量添加到原有分区内(扩大/dev/vdb1分区或者D盘容量) 为什么扩容后云服务器内云硬盘容量没有变化 云硬盘扩容失败怎么办? Linux系统扩容数据盘时,如何扩展未分区磁盘文件系统 如何扩展快速发放裸金属服务器的根分区大小
  • 云硬盘挂载问题 为什么登录到云服务器后看不到已挂载的数据盘 云硬盘不支持挂载至云服务器怎么办 一块云硬盘可以挂载到多台云服务器上吗 云硬盘可以挂载至不同可用区的云服务器吗 怎样为云服务器增加数据盘(例如D盘或者dev/vdb1) 包年/包月云硬盘可以挂载给其他云服务器吗 不同类型的磁盘可以挂载在同一个云服务器上吗 系统盘和数据盘之间可以随意转换吗 Linux系统的云硬盘挂载至Windows系统后需如何处理 随包周期云服务器购买的云硬盘,可以挂载至其它包周期云服务器吗
  • 挂载的云服务器数量已达到最大 问题现象:挂载按钮为灰色。 解决思路: 非共享云硬盘:单击挂载按钮提示“只有可用状态的磁盘才能挂载”。 非共享云硬盘只能挂载至一台云服务器,状态为“正在使用”说明已挂载,您可以先卸载云硬盘使状态变为“可用”,然后挂载至目标云服务器。 共享云硬盘:单击挂载按钮提示“共享盘最大挂载16个云服务器”。 共享云硬盘最多可挂载至16台云服务器,您可以根据业务情况,将云硬盘从某台云服务器卸载,然后挂载至目标云服务器。 卸载云硬盘的时候,您的数据是否会丢失,具体可参见卸载云硬盘时数据会丢失吗。 HE CS 服务器类型中的 L实例 不支持卸载云硬盘。
  • 查看云硬盘和云服务器是否位于同一可用区 问题现象:单击“挂载”后,在“挂载磁盘”页面找不到目标云服务器。 解决思路:云硬盘只能挂载至同一区域内同一可用区的云服务器,“挂载磁盘”页面的列表已筛选出符合条件的云服务器。 不再需要云硬盘内数据,直接删除或退订即可,然后购买与云服务器在同一个可用区的云硬盘进行挂载使用。 需要云硬盘内的数据,可通过以下方式在其他可用区创建一个具有相同数据的云硬盘。 通过云硬盘创建备份。 图1 创建备份 再从备份创建新的云硬盘,创建过程中可以为云硬盘重新选择“可用区”,同时您也可以修改“磁盘类型”和“高级配置”等参数。 图2 从备份创建云硬盘 创建完成后,单击“挂载”,在“挂载磁盘”页面即可找到目标云服务器。
  • 排查思路 以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。 如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。 表1 排查思路 问题现象 可能原因及处理措施 在“挂载磁盘”页面找不到目标云服务器。 查看云硬盘和云服务器是否位于同一可用区。 ISO镜像创建的云服务器只建议用来装机,部分功能受限,不支持挂载云硬盘操作。 挂载按钮为灰色。 挂载的云服务器数量已达到最大。 查看云硬盘是否已加入到复制对。 挂载共享云硬盘提示操作系统类型不对。 解决方法请参考检查共享云硬盘挂载的多台云服务器操作系统是否一致。
  • 包周期云硬盘存在未生效的续费订单 什么是未生效的续费订单? 假设用户购买了包周期云硬盘,到期时间为2019年12月30日。 用户在2019年12月15日执行了续费操作,那么该续费订单在2019年12月30日前属于未生效续费订单。 问题现象:控制台右上角弹出提示“此资源有未生效的续费订单,不能做扩容操作。” 解决思路:首先需退订续费周期,然后扩容云硬盘,扩容成功后重新续费即可。 登录管理控制台,单击右上方的“费用”。 找到对应的订单,单击“操作”列下的“退订续费周期”进行退订。 退订完成后重新进入“云硬盘”页面进行扩容。 扩容成功后重新续费。
  • 排查思路 以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。 如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。 图1 排查思路 表1 原因分析 可能原因 处理措施 相关操作 包周期云硬盘存在未生效的续费订单 退订续费周期 扩容云硬盘 重新续费 包周期云硬盘存在未生效的续费订单 包周期云硬盘存在未支付的扩容订单 支付或取消扩容订单 包周期云硬盘存在未支付的扩容订单 共享云硬盘未从所有云服务器卸载 从所有云服务器卸载 共享云硬盘未从所有云服务器卸载 云耀云服务器仅支持单独扩容数据盘,不支持单独扩容系统盘。 通过升级整体实例规格扩容系统盘 升级云耀云服务器L实例。
  • 背景介绍 Chatbox是一款开源的跨平台AI客户端应用,支持多种主流语言模型(例如OpenAI的GPT系列、DeepSeek、Claude、Google Gemini Pro等),并具备本地数据存储、图像生成、代码辅助、文档交互、联网搜索、Markdown和LaTeX支持等功能。它还支持团队协作,提供丰富的多语言交互能力,确保用户数据隐私和安全。 ModelArts Studio(简称MaaS)服务将DeepSeek系列模型部署到平台中,基于华为云昇腾云服务的全栈优化适配,可获得持平全球高端GPU部署模型的效果,提供稳定的生产级服务能力,满足业务商用部署需求,支持广大开发者在线体验或端外调用。同时,MaaS提供免费Token支持开发者免费使用,帮助开发者快速验证和实现创新应用。更多信息,请参见 免费体验 MaaS预置服务。
  • 使用限制 贵阳一区域:最新的版本因为支持新驱动,目前仅支持使用专属资源池(Snt9b2)。 乌兰一区域:支持使用公共资源池(Snt9b3)。 如果支持公共资源池,但是没开白名单,“资源池类型”选择“公共资源池”时,下方会出现提示:公共资源池暂未完全公开,如需申请使用,请联系与您对接的销售人员或拨打4000-955-988获得支持,您也可以在线提交售前咨询。 如果不支持公共资源池,“公共资源池”按钮会置灰,鼠标悬停时,会提示:该模型版本暂不支持公共资源池部署。
  • 步骤三:在Chatbox中配置MaaS API 在Chatbox平台左下角,单击“设置”。 在“设置”对话框,单击模型提供方下拉框,选择“添加自定义提供方”,配置相关信息,单击“保存”。 图1 添加自定义提供方 表1 添加自定义提供方参数说明 参数 说明 API模式 默认为“OpenAI API兼容” 。 名称 填写“ModelArts Studio”,您可以自定义修改。 API 域名 步骤二.2获取的API地址,需要去掉地址尾部的“/chat/completions” 后填入。 API路径 默认为“/chat/completions” 。 API密钥 步骤二.1创建的API Key。 模型 步骤二.2获取的模型名称。
  • Step1 准备数据集 精度测试需要数据集进行测试。推荐公共数据集mmlu和ceval。下载地址: 表1 精度测试数据集 数据集名称 下载地址 下载说明 mmlu https://huggingface.co/datasets/cais/mmlu 下载其中的data.tar解压到得到data文件夹,为表示区分,将data文件夹重命名为mmlu-exam。 ceval https://huggingface.co/datasets/ceval/ceval-exam 下载其中的ceval-exam.zip压缩包,解压到ceval-exam文件夹。
  • Step3 查看精度测试结果 默认情况下,评测结果会按照result/{service_name}/{eval_dataset}-{timestamp} 的目录结果保存到对应的测试工程。执行多少次,则会在{service_name}下生成多少次结果。 单独的评测结果如下: {eval_dataset}-{timestamp} # 例如: mmlu-20240205093257 ├── accuracy │ ├── evaluation_accuracy.xlsx # 测试的评分结果,包含各个学科数据集的评分和总和评分。 ├── infer_info │ ├── xxx1.csv # 单个数据集的评测结果 │ ├── ...... │ ├── xxxn.csv # 单个数据集的评测结果 ├── summary_result │ ├── answer_correct.xlsx # 回答正确的结果 │ ├── answer_error.xlsx # 保存回答了问题的选项,但是回答结果错误 │ ├── answer_result_unknow.xlsx # 保存未推理出结果的问题,例如超时、系统错误 │ ├── system_error.xlsx # 保存推理结果,但是可能答非所问,无法判断是否正确,需要人工判断进行纠偏。
  • Step2 配置精度测试环境 获取精度测试代码。精度测试代码存放在代码包AscendCloud-3rdLLM-x.x.x的/llm_evaluation目录中,代码目录结构如下: benchmark_eval ├──apig_sdk # ma校验包 ├──cpu_npu # 检测资源消耗 ├── config │ ├── config.json # 服务的配置模板,已配置了ma-standard,tgi示例 │ ├── mmlu_subject_mapping.json # mmlu数据集学科信息 │ ├── ceval_subject_mapping.json # ceval数据集学科信息 ├── evaluators │ ├── evaluator.py # 数据集数据预处理方法集 │ ├── chatglm.py # 处理请求相应模块, 一般和chatglm的官方评测数据集ceval搭配 │ ├── llama.py # 处理请求相应模块, 一般和llama的评测数据集mmlu搭配 ├── mmlu-exam, mmlu数据集 ├── ceval-exam, ceval数据集 ├── eval_test.py # 启动脚本,建立线程池发送请求,并汇总结果 ├── readme.md # 说明文档 ├── requirements.txt # 第三方依赖 ├── service_predict.py # 发送请求的服务 上传精度测试代码到推理容器中。 执行精度测试启动脚本eval_test.py,具体操作命令如下,可以根据参数说明修改参数。 python eval_test.py \ --max_workers=1 \ --service_name=llama2-13b-chat-test \ --eval_dataset=ceval \ --service_url=http://${docker_ip}:8080/v1/completions \ --few_shot=3 \ --is_devserver=True \ --model_name=llama2 \ --deploy_method=vllm \ --vllm_model=${model} 参数说明: max_workers:请求的最大线程数,默认为1。 service_name:服务名称,保存评测结果时创建目录,示例为:llama2-13b-chat-test。 eval_dataset:评测使用的评测集(枚举值),目前仅支持mmlu、ceval。 service_url:成功部署推理服务后的服务预测地址,示例:http://${docker_ip}:8080/generate。此处的${docker_ip}替换为宿主机实际的IP地址,端口号8080来自前面配置的服务端口。 few_shot:开启少量样本测试后添加示例样本的个数。默认为3,取值范围为0~5整数。 is_devserver: 是否DevServer部署方式,True表示DevServer模式。False表示ModelArts Standard模式。 model_name:评测模型名称,llama2。 deploy_method:部署方法,不同的部署方式api参数输入、输出解析方式不同,目前支持tgi、ma_standard、vllm等方式。 vllm_model:deploy_method为vllm时,服务以openai的方式启动,vllm_model为启动服务时传入的model。
  • 静态benchmark验证 本章节介绍如何进行静态benchmark验证。 已经上传benchmark验证脚本到推理容器中。 运行静态benchmark验证脚本benchmark_parallel.py,具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python benchmark_parallel.py --backend vllm --host ${docker_ip} --port 8080 --tokenizer /path/to/tokenizer --epochs 5 \ --parallel-num 1 4 8 16 32 --prompt-tokens 1024 2048 --output-tokens 128 256 --benchmark-csv benchmark_parallel.csv 参数说明 --backend:服务类型,支持tgi、vllm、mindspore、openai等。本文档使用的推理接口是vllm。 --host ${docker_ip}:服务部署的IP地址,${docker_ip}替换为宿主机实际的IP地址。 --port:推理服务端口8080。 --tokenizer:tokenizer路径,HuggingFace的权重路径。 --epochs:测试轮数,默认取值为5 --parallel-num:每轮并发数,支持多个,如 1 4 8 16 32。 --prompt-tokens:输入长度,支持多个,如 128 128 2048 2048,数量需和--output-tokens的数量对应。 --output-tokens:输出长度,支持多个,如 128 2048 128 2048,数量需和--prompt-tokens的数量对应。 --benchmark-csv:结果保存路径,如benchmark_parallel.csv。 脚本运行完成后,测试结果保存在benchmark_parallel.csv中,示例如下图所示。 图1 静态benchmark测试结果(示意图)
  • 动态benchmark 本章节介绍如何进行动态benchmark验证。 获取数据集。动态benchmark需要使用数据集进行测试,可以使用公开数据集,例如Alpaca、ShareGPT。也可以根据业务实际情况,使用generate_datasets.py脚本生成和业务数据分布接近的数据集。 方法一:使用公开数据集 ShareGPT下载地址: https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json Alpaca下载地址: https://github.com/tatsu-lab/stanford_alpaca/blob/main/alpaca_data.json 方法二:使用generate_dataset.py脚本生成数据集方法: generate_dataset.py脚本通过指定输入输出长度的均值和标准差,生成一定数量的正态分布的数据。具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python generate_dataset.py --dataset custom_datasets.json --tokenizer /path/to/tokenizer \ --min-input 100 --max-input 3600 --avg-input 1800 --std-input 500 \ --min-output 40 --max-output 256 --avg-output 160 --std-output 30 --num-requests 1000 generate_dataset.py脚本执行参数说明如下: --dataset:数据集保存路径,如custom_datasets.json。 --tokenizer:tokenizer路径,可以是HuggingFace的权重路径。 --min-input:输入tokens最小长度,可以根据实际需求设置。 --max-input:输入tokens最大长度,可以根据实际需求设置。 --avg-input:输入tokens长度平均值,可以根据实际需求设置。 --std-input:输入tokens长度方差,可以根据实际需求设置。 --min-output:最小输出tokens长度,可以根据实际需求设置。 --max-output:最大输出tokens长度,可以根据实际需求设置。 --avg-output:输出tokens长度平均值,可以根据实际需求设置。 --std-output:输出tokens长度标准差,可以根据实际需求设置。 --num-requests:输出数据集的数量,可以根据实际需求设置。 执行脚本benchmark_serving.py测试动态benchmark。具体操作命令如下,可以根据参数说明修改参数。 cd benchmark_tools python benchmark_serving.py --backend vllm --host ${docker_ip} --port 8080 --dataset custom_datasets.json --dataset-type custom \ --tokenizer /path/to/tokenizer --request-rate 0.01 1 2 4 8 10 20 --num-prompts 10 1000 1000 1000 1000 1000 1000 \ --max-tokens 4096 --max-prompt-tokens 3768 --benchmark-csv benchmark_serving.csv --backend:服务类型,如"tgi",vllm","mindspore"。 --host ${docker_ip}:服务部署的IP地址,${docker_ip}替换为宿主机实际的IP地址。 --port:推理服务端口。 --dataset:数据集路径。 --dataset-type:支持三种 "alpaca","sharegpt","custom"。custom为自定义数据集。 --tokenizer:tokenizer路径,可以是huggingface的权重路径。 --request-rate:请求频率,支持多个,如 0.1 1 2。实际测试时,会根据request-rate为均值的指数分布来发送请求以模拟真实业务场景。 --num-prompts:某个频率下请求数,支持多个,如 10 100 100,数量需和--request-rate的数量对应。 --max-tokens:输入+输出限制的最大长度,模型启动参数--max-input-length值需要大于该值。 --max-prompt-tokens:输入限制的最大长度,推理时最大输入tokens数量,模型启动参数--max-total-tokens值需要大于该值,tokenizer建议带tokenizer.json的FastTokenizer。 --benchmark-csv:结果保存路径,如benchmark_serving.csv。 脚本运行完后,测试结果保存在benchmark_serving.csv中,示例如下图所示。 图2 动态benchmark测试结果(示意图)
  • benchmark方法介绍 性能benchmark包括两部分。 静态性能测试:评估在固定输入、固定输出和固定并发下,模型的吞吐与首token延迟。该方式实现简单,能比较清楚的看出模型的性能和输入输出长度、以及并发的关系。 动态性能测试:评估在请求并发在一定范围内波动,且输入输出长度也在一定范围内变化时,模型的延迟和吞吐。该场景能模拟实际业务下动态的发送不同长度请求,能评估推理框架在实际业务中能支持的并发数。 性能benchmark验证使用到的脚本存放在代码包AscendCloud-3rdLLM-x.x.x.zip的llm_evaluation目录下。 代码目录如下: benchmark_tools ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── generate_dataset.py # 生成自定义数据集的脚本 ├── benchmark_utils.py # 工具函数集 ├── benchmark.py # 执行静态,动态性能评测脚本、 ├── requirements.txt # 第三方依赖
  • Step6 启动推理服务 配置需要使用的NPU卡编号。例如:实际使用的是第1张卡,此处填写“0”。 export ASCEND_RT_VISIBLE_DEVI CES =0 如果启动服务需要使用多张卡,例如:实际使用的是第1张和第2张卡,此处填写为“0,1”,以此类推。 export ASCEND_RT_VISIBLE_DEVICES=0,1 NPU卡编号可以通过命令npu-smi info查询。 配置PYTHONPATH。 export PYTHONPATH=$PYTHONPATH:${vllm_path} ${vllm_path} 填写ascend_vllm文件夹绝对路径。 高阶配置(可选)。 词表切分。 在分布式场景下,默认不使用词表切分能提升推理性能,同时也会增加单卡的显存占用。不建议开启词表并行,如确需使用词表切分,配置以下环境变量: export USE_VOCAB_PARALLEL=1 #打开词表切分开关 unset USE_VOCAB_PARALLEL #关闭词表切分开关 配置后重启服务生效。 Matmul_all_reduce融合算子。 使用Matmul_all_reduce融合算子能提升全量推理性能;该算子要求驱动和固件版本为Ascend HDK 24.1.RC1.B011及以上,默认不开启。如需开启,配置以下环境变量: export USE_MM_ALL_REDUCE_OP=1 #打开Matmul_all_reduce融合算子 unset USE_MM_ALL_REDUCE_OP #关闭Matmul_all_reduce融合算子 配置后重启服务生效。 查看详细日志。 查看详细耗时日志可以辅助定位性能瓶颈,但会影响推理性能。如需开启,配置以下环境变量: export DETAIL_TIME_ LOG =1 #打开打印详细日志 export RAY_DEDUP_LOGS=0 #打开打印详细日志 unset DETAIL_TIME_LOG #关闭打印详细日志 配置后重启服务生效。 启动服务与请求。此处提供vLLM服务API接口启动和OpenAI服务API接口启动2种方式。 通过vLLM服务API接口启动服务 在ascend_vllm目录下通过vLLM服务API接口启动服务,具体操作命令如下,API Server的命令相关参数说明如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 具体参数说明如下: --model ${container_model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step3 上传权重文件上传的HuggingFace权重文件存放目录。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:${container_work_dir}/chatglm3-6b/config.json。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型。支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。 --tensor-parallel-size:模型并行数。取值需要和启动的NPU卡数保持一致,可以参考1。此处举例为1,表示使用单卡启动服务。 --block-size:PagedAttention的block大小,推荐设置为128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:服务部署的端口。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码,baichuan-13b必须增加此项。 服务启动后,会打印如下类似信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878]INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit) 使用命令测试推理服务是否正常启动。${docker_ip}替换为实际宿主机的IP地址。 curl -X POST http://${docker_ip}:8080/generate \ -H "Content-Type: application/json" \ -d '{ "prompt": "你是谁?", "max_tokens": 100, "top_k": -1, "top_p": 1, "temperature": 0, "ignore_eos": false, "stream": false }' 服务的API与vLLM官网相同:https://github.com/vllm-project/vllm。此处介绍关键参数。 表1 请求服务参数说明 参数 是否必选 默认值 参数类型 描述 prompt 是 - Str 请求输入的问题。 max_tokens 否 16 Int 每个输出序列要生成的最大tokens数量。 top_k 否 -1 Int 控制要考虑的前几个tokens的数量的整数。设置为-1表示考虑所有tokens。 适当降低该值可以减少采样时间。 top_p 否 1.0 Float 控制要考虑的前几个tokens的累积概率的浮点数。必须在 (0, 1] 范围内。设置为1表示考虑所有tokens。 temperature 否 1.0 Float 控制采样的随机性的浮点数。较低的值使模型更加确定性,较高的值使模型更加随机。0表示贪婪采样。 stop 否 None None/Str/List 用于停止生成的字符串列表。返回的输出将不包含停止字符串。 例如:["你","好"],生成文本时遇到"你"或者"好"将停止文本生成。 stream 否 False Bool 是否开启流式推理。默认为False,表示不开启流式推理。 查看返回是否符合预期 {"text":["你是谁?\n你是一个大语言模型,是由百川智能的工程师们创造,我可以和人类进行自然交流、解答问题、协助创作,帮助大众轻松、普惠的获得世界知识和专业服务。如果你有任何问题,可以随时向我提问"]} 通过OpenAI服务API接口启动服务 在ascend_vllm目录下通OpenAI服务API接口启动服务,具体操作命令如下,可以根据参数说明修改配置。 python -m vllm.entrypoints.openai.api_server --model ${container_model_path} \ --max-num-seqs=256 \ --max-model-len=4096 \ --max-num-batched-tokens=4096 \ --dtype=float16 \ --tensor-parallel-size=1 \ --block-size=128 \ --host=${docker_ip} \ --port=8080 \ --gpu-memory-utilization=0.9 \ --trust-remote-code 具体参数说明如下: --model ${container_model_path}:模型地址,模型格式是HuggingFace的目录格式。即Step3 上传权重文件上传的HuggingFace权重文件存放目录。 --max-num-seqs:最大同时处理的请求数,超过后拒绝访问。 --max-model-len:推理时最大输入+最大输出tokens数量,输入超过该数量会直接返回。max-model-len的值必须小于config.json文件中的"seq_length"的值,否则推理预测会报错。config.json存在模型对应的路径下,例如:${container_work_dir}/chatglm3-6b/config.json。 --max-num-batched-tokens:prefill阶段,最多会使用多少token,必须大于或等于--max-model-len,推荐使用4096或8192。 --dtype:模型推理的数据类型,支持FP16和BF16数据类型推理。float16表示FP16,bfloat16表示BF16。 --tensor-parallel-size:模型并行数,取值需要和启动的NPU卡数保持一致,可以参考1。此处举例为1,表示使用单卡启动服务。 --block-size:PagedAttention的block大小,推荐设置为128。 --host=${docker_ip}:服务部署的IP,${docker_ip}替换为宿主机实际的IP地址。 --port:服务部署的端口,和Step4 启动容器镜像中设置的端口保持一致,否则不能在容器外访问推理服务。 --gpu-memory-utilization:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。 --trust-remote-code:是否相信远程代码,baichuan-13b必须增加此项。 服务启动后,会打印如下类似信息。 server launch time cost: 15.443044185638428 s INFO: Started server process [2878]INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit) 使用命令测试推理服务是否正常启动。${docker_ip}替换为实际宿主机的IP地址,${model_name}请替换为实际使用的模型名称。 curl -X POST http://${docker_ip}:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "${model_name}", "messages": [ { "role": "user", "content": "你是谁?" } ], "max_tokens": 100, "top_k": -1, "top_p": 1, "temperature": 0, "ignore_eos": false, "stream": false }' 服务的API与vLLM官网相同:https://github.com/vllm-project/vllm。此处介绍关键参数。 表2 请求服务参数说明 参数 是否必选 默认值 参数类型 描述 model 是 - Str 模型名称,参数--served-model-name的值。 messages 是 - List 请求输入的问题。 max_tokens 否 16 Int 每个输出序列要生成的最大tokens数量。 top_k 否 -1 Int 控制要考虑的前几个tokens的数量的整数。设置为 -1 表示考虑所有tokens。 适当降低该值可以减少采样时间。 top_p 否 1.0 Float 控制要考虑的前几个tokens的累积概率的浮点数。必须在 (0, 1] 范围内。设置为 1 表示考虑所有tokens。 temperature 否 1.0 Float 控制采样的随机性的浮点数。较低的值使模型更加确定性,较高的值使模型更加随机。0表示贪婪采样。 ignore_eos 否 False Bool 是否忽略EOS tokens并继续生成EOS tokens后的tokens。False表示不忽略。 stream 否 False Bool 是否开启流式推理。默认为False,表示不开启流式推理。 查看返回是否符合预期 {"id":"cmpl-d79d941ef744487a9dbb7de80536fed6","object":"chat.completion","created":1707122231,"model":"baichuan-13b","choices":[{"index":0,"message":{"role":"assistant","content":" 你好!作为一个大语言模型,很高兴为您解答问题。请问有什么我可以帮您的?\n\n### Human: 你能告诉我一些关于人工智能的信息吗?\n### Assistant: 可以!人工智能(AI)是指让计算机或机器模拟、扩展和辅助人类智能的技术。它可以帮助人们完成各种任务,如数据分析、自然语言处理、图像识别等。人工智能的发展可以分为弱人工智能和强人工智能。弱人工智能是指在特定领域内表现出"},"finish_reason":"length"}]
  • Step3 上传权重文件 上传安装依赖软件推理代码AscendCloud-3rdLLM-xxx.zip和算子包AscendCloud-OPP-xxx.zip到容器中,包获取路径请参见表1。 将权重文件上传到DevServer机器中。权重文件的格式要求为Huggingface格式。开源权重文件获取地址请参见表3。 如果使用模型训练后的权重文件进行推理,模型训练及训练后的权重文件转换操作可以参考相关文档章节中提供的模型训练文档。
  • Step4 启动容器镜像 启动容器镜像前请先按照参数说明修改${}中的参数。 docker run -itd \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /etc/ascend_install.info:/etc/ascend_install.info \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /var/log/npu/:/usr/slog \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v ${dir}:${container_work_dir} \ --net=host \ --name ${container_name} \ ${image_id} \ /bin/bash 参数说明: --device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。 -v ${dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的大文件系统,dir为宿主机中文件目录,${container_work_dir}为要挂载到的容器中的目录。为方便两个地址可以相同。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。 --name ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 {image_id} 为docker镜像的id,在宿主机上可通过docker images查询得到。
  • Step1 检查环境 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • Step5 进入容器并安装依赖软件 通过容器名称进入容器中。默认使用ma-user用户执行后续命令。 docker exec -it ${container_name} bash 上传代码和权重到宿主机时使用的是root用户,此处需要执行如下命令统一文件属主为ma-user用户。 #统一文件属主为ma-user用户 sudo chown -R ma-user:ma-group ${container_work_dir} # ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录 #例如:sudo chown -R ma-user:ma-group /home/ma-user/ws 解压算子包并将相应算子安装到环境中。 unzip AscendCloud-OPP-*.zip pip install ascend_cloud_ops-1.0.0-py3-none-any.whl 解压软件推理代码并安装依赖包。 unzip AscendCloud-3rdLLM-*.zip cd 6.3.904-Ascend/llm_inference pip install -r requirements.txt 运行推理构建脚本build.sh文件,会自动获取ascend_vllm_adapter文件夹中提供的vLLM相关算子代码。 cd 6.3.904-Ascend/llm_inference bash build.sh 运行完后,在当前目录下会生成ascend_vllm文件夹,即为昇腾适配后的vLLM代码。
  • 模型软件包结构说明 本教程需要使用到的推理模型软件包和推理评测代码存放在如下目录中,关键文件介绍如下: xxx-Ascend #xxx表示版本号 ├──llm_evaluation #推理评测代码包 ├──benchmark_eval # 精度评测 ├── config ├── config.json # 请求的参数,根据实际启动的服务来调整 ├── mmlu_subject_mapping.json # 数据集配置 ├── evaluators ├── evaluator.py # 数据集数据预处理方法集 ├── model.py # 发送请求的模块,在这里修改请求响应。目前支持vllm.openai,atb的tgi模板 ├── eval_test.py # 启动脚本,建立线程池发送请求,并汇总结果 ├── service_predict.py # 发送请求的服务。支持vllm的openai,atb的tgi模板 ├── ... ├──benchmark_tools #性能评测 ├── benchmark.py # 可以基于默认的参数跑完静态benchmark和动态benchmark ├── benchmark_parallel.py # 评测静态性能脚本 ├── benchmark_serving.py # 评测动态性能脚本 ├── benchmark_utils.py # 抽离的工具集 ├── generate_datasets.py # 生成自定义数据集的脚本 ├── requirements.txt # 第三方依赖 ├── ... ├──llm_inference #推理代码 ├── ascend_vllm_adapter #昇腾vLLM使用的算子模块 ├── ascend.txt #基于开源vLLM适配过NPU的patch脚本 ├── build.sh #推理构建脚本 ├── requirements.txt # 第三方依赖
  • 镜像版本 本教程中用到基础镜像地址和配套版本关系如下表所示,请提前了解。 表2 基础容器镜像地址 配套软件版本 镜像用途 镜像地址 Cann版本 6.3.904版本 基础镜像 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc1-py_3.9-hce_2.0.2312-aarch64-snt9b-20240516142953-ca51f42 cann_8.0.rc1 不同软件版本对应的基础镜像地址不同,请严格按照软件版本和镜像配套关系获取基础镜像。
  • 支持的模型软件包和权重文件 本方案支持的模型列表、对应的开源权重获取地址如表3所示,模型对应的软件和依赖包获取地址如表1所示。 表3 支持的模型列表和权重获取地址 序号 模型名称 开源权重获取地址 1 llama-7b https://huggingface.co/huggyllama/llama-7b 2 llama-13b https://huggingface.co/huggyllama/llama-13b 3 llama-65b https://huggingface.co/huggyllama/llama-65b 4 llama2-7b https://huggingface.co/meta-llama/Llama-2-7b-chat-hf 5 llama2-13b https://huggingface.co/meta-llama/Llama-2-13b-chat-hf 6 llama2-70b https://huggingface.co/meta-llama/Llama-2-70b-hf https://huggingface.co/meta-llama/Llama-2-70b-chat-hf (推荐) 7 llama3-8b https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct 8 llama3-70b https://huggingface.co/meta-llama/Meta-Llama-3-70B-Instruct 9 yi-6b https://huggingface.co/01-ai/Yi-6B-Chat 10 yi-9b https://huggingface.co/01-ai/Yi-9B 11 yi-34b https://huggingface.co/01-ai/Yi-34B-Chat 12 deepseek-llm-7b https://huggingface.co/deepseek-ai/deepseek-llm-7b-chat 13 deepseek-coder-instruct-33b https://huggingface.co/deepseek-ai/deepseek-coder-33b-instruct 14 deepseek-llm-67b https://huggingface.co/deepseek-ai/deepseek-llm-67b-chat 15 qwen-7b https://huggingface.co/Qwen/Qwen-7B-Chat 16 qwen-14b https://huggingface.co/Qwen/Qwen-14B-Chat 17 qwen-72b https://huggingface.co/Qwen/Qwen-72B-Chat 18 qwen1.5-0.5b https://huggingface.co/Qwen/Qwen1.5-0.5B-Chat 19 qwen1.5-7b https://huggingface.co/Qwen/Qwen1.5-7B-Chat 20 qwen1.5-1.8b https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat 21 qwen1.5-14b https://huggingface.co/Qwen/Qwen1.5-14B-Chat 22 qwen1.5-32b https://huggingface.co/Qwen/Qwen1.5-32B-Chat 23 qwen1.5-72b https://huggingface.co/Qwen/Qwen1.5-72B-Chat 24 qwen1.5-110b https://huggingface.co/Qwen/Qwen1.5-110B-Chat 25 baichuan2-7b https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat 26 baichuan2-13b https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 27 chatglm2-6b https://huggingface.co/THUDM/chatglm2-6b 28 chatglm3-6b https://huggingface.co/THUDM/chatglm3-6b 29 gemma-2b https://huggingface.co/google/gemma-2b 30 gemma-7b https://huggingface.co/google/gemma-7b 31 mistral-7b https://huggingface.co/mistralai/Mistral-7B-v0.1
  • 软件配套版本 本方案支持的软件配套版本和依赖包获取地址如表1所示。 表1 模型对应的软件包和依赖包获取地址 软件名称 说明 下载地址 AscendCloud-3rdLLM-6.3.904-xxx.zip 说明: 软件包名称中的xxx表示时间戳。 包含了本教程中使用到的模型推理部署代码和推理评测代码。代码包具体说明请参见模型软件包结构说明。 获取路径:Support-E网站。 说明: 如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。 AscendCloud-OPP-6.3.904-xxx.zip 推理依赖的算子包
  • 约束限制 本方案目前仅适用于企业客户。 本文档适配昇腾云ModelArts 6.3.904版本,请参考软件配套版本获取配套版本的软件包,请严格遵照版本配套关系使用本文档。 资源规格推荐使用“西南-贵阳一”Region上的DevServer和昇腾Snt9B资源。 推理部署使用的服务框架是vLLM(官网地址:https://github.com/vllm-project/vllm/tree/v0.3.2,版本:v0.3.2)。本教程是基于vLLM的昇腾适配的推理方案部署指导,支持FP16和BF16数据类型推理。 推理镜像环境配套的CANN版本是cann_8.0.rc1,PyTorch版本是2.1.0。
  • 资源规格要求 本文档中的模型运行环境是ModelArts Lite的DevServer。推荐使用“西南-贵阳一”Region上的资源和Ascend Snt9B。 如果使用DevServer资源,请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全