更新时间:2025-09-12 GMT+08:00
分享

在ModelArts Studio(MaaS)创建模型

MaaS提供了基于昇腾云算力适配的开源大模型(DeepSeek、通义千问等),您可以使用这些基础模型,结合自定义的模型权重文件(权重类文件、词表类文件和配置类文件),创建个人专属的模型。创建成功的模型可以进行调优、压缩、推理等操作。

场景描述

在当今数字化时代,人工智能应用愈发广泛。许多开发者和研究人员期望拥有个性化的大模型,用于各种特定场景,例如开发智能客服提升服务效率、辅助代码写作等。通常情况下,从头训练一个大模型需要大量的时间、计算资源和资金。多数开发者难以承担从头训练大模型的高昂成本,且技术门槛极高,涉及复杂的算法优化、海量数据处理等难题。

即使选择对开源模型进行微调,实际操作过程中仍存在阻碍,例如模型权重文件格式兼容性问题频发、本地训练的PyTorch权重文件与云平台不兼容,导致模型无法加载、不同模型的参数配置差异大等。

MaaS基于昇腾云算力适配开源大模型,推出预置模型+自定义权重的全流程方案:

  • 极简操作,快速适配:支持直接上传Hugging Face标准格式的权重文件,平台自动完成与昇腾芯片的算力适配,无需编写额外适配代码。
  • 模板化配置,即开即用:内置DeepSeek、通义千问、百川、ChatGLM、Llama等主流模型的配置模板,用户无需手动调整复杂参数,大幅缩短模型开发周期。
  • 弹性算力,高效运行:提供灵活的算力资源按需分配机制,可根据模型规模和业务需求动态调整算力,为业务高效运行提供强大保障。

为什么要创建我的模型

MaaS模型广场提供了丰富的基础模型,您可以直接使用这些模型进行在线体验、部署模型服务等操作。当基础模型无法满足个性化需求时,您可以基于模型广场的模型创建专属的个性化模型,以实现更优的效果,同时便于版本管理和持续优化。

  • 满足个性化需求:MaaS支持结合自定义权重文件,基于昇腾云适配的开源模型创建个人专属模型。模型广场预置模型是通用的,难以契合所有用户的特定需求,如企业需要将大模型应用于特定业务场景,预置模型因缺乏针对性难以满足需求,自定义模型可以凭借定制化权重文件实现个性化功能。
  • 实现更好的效果:在某些复杂场景中,模型广场预置模型的表现可能不尽人意。例如在专业领域的对话问答、代码生成等场景,通过创建个人模型并修改权重配置,能优化模型运行效果,在专业任务处理上比预置模型更具优势。
  • 便于版本管理和优化:MaaS提供模型版本管理功能,一个模型最多可支持创建10个版本。创建个人模型后,您可以通过新增版本不断优化模型,提升可追溯性。

计费说明

创建模型本身不收费,但使用过程中涉及的OBS存储、计算等资源会产生费用,详情请参见计费概述

约束限制

  • 用于生成专属模型的模型权重文件需要满足Hugging Face上的对应模型的文件格式要求。
    • 模型权重文件夹下包括权重类文件、词表类文件和配置类文件。
    • 可以使用transformers的from_pretrained方法对模型权重文件夹进行加载。

前提条件

已注册华为账号并开通华为云,详情请见注册华为账号并开通华为云

步骤一:准备权重配置文件

参考Hugging Face官网,准备好用于生成专属模型的模型权重文件。

如果Hugging Face网站打不开,请在互联网上搜索解决方案。

(可选)步骤二:修改权重配置文件

当选择ChatGLM3-6B、GLM-4-9B、Qwen-7B、Qwen-14B、Qwen-72B、Baichuan2-7B、Baichuan2-13B、Llama2-7B、Llama2-13B和Llama2-80B基础模型(名字必须一致)创建模型时,建议对权重配置参数进行优化调整,以提升模型的预测精度和输出质量,从而构建更贴合具体业务需求的定制化模型。修改后的权重文件要更新至OBS桶中。

Qwen2.5系列模型无需修改权重即可部署。关于如何部署模型服务,请参见使用ModelArts Studio(MaaS)部署模型服务

  • ChatGLM3-6B、GLM-4-9B

    修改文件“tokenization_chatglm.py”

    • 第一处

      原内容

      # Load from model defaults assert self.padding_side == "left"

      修改为

      # Load from model defaults # assert self.padding_side == "left"
    • 第二处

      原内容

      if needs_to_be_padded:    
      difference = max_length - len(required_input)     
      if "attention_mask" in encoded_inputs:         
      encoded_inputs["attention_mask"] = [0] * difference + encoded_inputs["attention_mask"]    
      if "position_ids" in encoded_inputs:        
      encoded_inputs["position_ids"] = [0] * difference + encoded_inputs["position_ids"]    encoded_inputs[self.model_input_names[0]] = [self.pad_token_id] * difference + required_input

      修改为

      if needs_to_be_padded:    
      difference = max_length - len(required_input)     
      if "attention_mask" in encoded_inputs:         
      encoded_inputs["attention_mask"] = encoded_inputs["attention_mask"] + [0] * difference     
      if "position_ids" in encoded_inputs:        
      encoded_inputs["position_ids"] = encoded_inputs["position_ids"] + [0] * difference     encoded_inputs[self.model_input_names[0]] =  required_input + [self.pad_token_id] * difference
  • Qwen-7B、Qwen-14B和Qwen-72B
    • 第一处,修改文件“modeling_qwen.py”

      原内容

      SUPPORT_BF16 = SUPPORT_CUDA and torch.cuda.is_bf16_supported() SUPPORT_FP16 = SUPPORT_CUDA and torch.cuda.get_device_capability(0)[0] >= 7

      修改为

      SUPPORT_BF16 = SUPPORT_CUDA and True SUPPORT_FP16 = SUPPORT_CUDA and True
    • 第二处,修改文件“tokenizer_config.json”

      在文件中增加内容

      chat_template = {% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if (loop.last and add_generation_prompt) or not loop.last %}{{ '<|im_end|>' + '\n'}}{% endif %}{% endfor %}{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}{{ '<|im_start|>assistant\n' }}{% endif %}
  • Baichuan2-7B和Baichuan2-13B

    在文件“tokenizer_config.json”中增加如下内容。

    chat_template = {% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if (loop.last and add_generation_prompt) or not loop.last %}{{ '<|im_end|>' + '\n'}}{% endif %}{% endfor %}{% if add_generation_prompt and messages[-1]['role'] != 'assistant' %}{{ '<|im_start|>assistant\n' }}{% endif %}
  • Llama2-7B、Llama2-13B和Llama2-80B

    在文件“tokenizer_config.json”中增加如下内容。

    chat_template = {% if messages[0]['role'] == 'system' %}{% set loop_messages = messages[1:] %}{% set system_message = messages[0]['content'] %}{% else %}{% set loop_messages = messages %}{% set system_message = false %}{% endif %}{% for message in loop_messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if loop.index0 == 0 and system_message != false %}{% set content = '<<SYS>>\\n' + system_message + '\\n<</SYS>>\\n\\n' + message['content'] %}{% else %}{% set content = message['content'] %}{% endif %}{% if message['role'] == 'user' %}{{ bos_token + '[INST] ' + content.strip() + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ ' '  + content.strip() + ' ' + eos_token }}{% endif %}{% endfor %}

步骤三:将权重配置文件上传至OBS桶

关于如何将权重文件存储到OBS桶,请参见上传概述

单次上传本地文件到OBS的总大小不能超过5GB。如果需要上传超过5GB的大对象,可以使用OBS Browser+、obsutil工具上传,或使用OBS SDK及API的多段接口上传,上限为48.8TB,详情请参见如何上传超过5GB的大对象

步骤四:创建我的模型

  1. 登录ModelArts Studio(MaaS)控制台,在顶部导航栏选择目标区域。
  2. 在左侧导航栏,单击“我的模型”
  3. “我的模型”页面右上角,单击“创建模型”
  4. “创建模型”页面,配置相关参数。
    表1 创建模型参数说明

    参数

    说明

    来源模型

    MaaS提供基于昇腾云算力适配的开源大模型供您使用。单击“选择基础模型”,在弹窗中选择模型,单击“确定”

    关于模型系列的详细介绍,请参见表2

    模型名称

    自定义模型名称。支持1~64位,以中文、大小写字母开头,只包含中文、大小写字母、数字、下划线(_)、中划线(-)和(.)。

    描述

    自定义模型简介。最大支持100字符。

    权重设置与词表

    默认选择“自定义权重”。权重文件指的是模型的参数集合。

    自定义权重存储路径

    单击“自定义权重存储路径”右侧的文件图标,选择步骤三存放模型权重文件的OBS路径(必须选择到模型文件夹),然后单击“确定”

    表2 模型系列介绍

    模型系列

    模型类型

    应用场景

    支持语言

    支持地域

    百川

    文本生成

    对话问答、数学推理、代码生成、翻译

    中文、英文

    西南-贵阳一、华东二

    ChatGLM

    ChatGLM3

    文本生成

    对话问答、数学推理、代码生成

    中文、英文

    西南-贵阳一、华东二

    GLM-4

    文本生成

    对话问答、长文本推理、代码生成

    中文、英文

    西南-贵阳一、华东二

    DeepseekCoder

    文本生成

    对话问答、文本推理

    中文、英文

    西南-贵阳一、华东二

    DeepSeek

    DeepSeek-R1

    文本生成

    对话问答、文本生成推理

    中文、英文

    西南-贵阳一、华北-乌兰察布一

    DeepSeek-V3

    文本生成

    对话问答、翻译

    中文、英文

    西南-贵阳一、华北-乌兰察布一

    Llama2

    文本生成

    对话问答、智能创作、文本摘要

    英文

    西南-贵阳一、华东二

    Llama3

    文本生成

    对话问答、智能创作、文本摘要

    英文

    西南-贵阳一、华东二

    Llama3.1

    文本生成

    对话问答、智能创作、文本摘要

    英文

    西南-贵阳一、华东二

    通义千问

    Qwen

    文本生成

    对话问答、智能创作、文本摘要、翻译、代码生成、数学推理

    中文、英文

    西南-贵阳一、华东二

    QwQ

    文本生成

    对话问答

    英文

    西南-贵阳一

    通义千问1.5

    文本生成

    代码生成、数学推理、对话问答

    中文、英文

    西南-贵阳一、华东二

    通义千问2

    Qwen2

    文本生成

    多语言处理、数学推理、对话问答

    中文、英文

    西南-贵阳一、华东二

    Qwen2-VL

    图像理解

    图像理解、对话问答

    中文、英文

    西南-贵阳一、华东二

    通义千问2.5

    Qwen2.5

    文本生成

    多语言处理、数学推理、对话问答

    中文、英文

    西南-贵阳一、华东二

    Qwen2.5-VL

    图像理解

    图像理解、对话问答

    中文、英文

    西南-贵阳一

    Yi

    文本生成

    代码生成、数学推理、对话问答

    中文、英文

    西南-贵阳一、华东二

  5. 参数配置完成后,单击“创建”,创建自定义模型。

    在模型列表,当模型“状态”变成“创建成功”时,表示模型创建完成。

步骤五:查看我的模型详情

模型创建完成后,您可以在“模型详情”页面查看模型的基本信息和版本信息。

“我的模型”页面,单击目标模型名称,进入模型详情页面,查看模型的“基本信息”“我的版本”

图1 模型详情
  • 基本信息:可以查看模型名称、模型ID、模型类型、来源模型、创建时间等信息。
  • 我的版本:可以查看已创建的模型版本,单击版本号进入“版本详情”页面,可以查看各个模型版本的详细信息和任务记录。
    图2 版本详情
    • 版本信息:可以查看模型名称、状态、创建时间、基本模型及版本、权重与词表路径等信息。
    • 任务记录:可以查看任务名称、作业类型、状态、创建时间等信息。

(可选)步骤六:新增模型版本

为了提升模型的可追溯性和优化效率,MaaS提供了模型版本管理功能。通过此功能,您能够创建模型的新版本。一个模型最多支持创建10个版本。

  1. ModelArts Studio(MaaS)控制台左侧导航栏,单击“我的模型”进入模型列表。
  2. 单击目标模型名称,进入模型详情页面。
  3. “我的版本”区域,单击“新增版本”
  4. “新增版本”页面,配置模型新版本的参数。
    表3 新增模型版本参数说明

    参数

    说明

    新版本号

    系统自动编号,不可修改。

    版本描述

    自定义模型版本简介。最大支持100字符。

    选择基础模型版本

    选择基础模型的版本。

    选择权重路径

    单击文件图标,选择步骤三存放模型权重文件的OBS路径(必须选择到模型文件夹),然后单击“确定”

  5. 配置完成后,单击“确定”,新增模型版本。

    在版本列表,当新增版本的“状态”变成“创建成功”时,表示模型新版本创建完成。

(可选)步骤七:删除我的模型

当不需要模型时,可以进行删除操作。删除操作无法恢复,请谨慎操作。

  1. ModelArts Studio(MaaS)控制台左侧导航栏,选择“我的模型”进入模型列表。
  2. 在模型列表,单击目标模型名称,进入“模型详情”页面。
  3. “我的版本”区域,单击版本号,进入“版本详情”页面。查看该版本的模型“任务记录”是否为空。
    • 是,表示模型未被用于训推任务,可以直接删除。则直接执行下一步。
    • 否,表示模型已被用于训推任务,需要先删除所有任务,再执行下一步。

      删除任务:单击操作列的“删除”,在“删除作业”对话框,输入“DELETE”,单击“确定”

  4. 确认该模型的各个版本的“任务记录”都为空。

    当模型存在任务记录会删除失败。

  5. “模型详情”页面,单击右上角的“删除”,在弹窗中输入“DELETE”,单击“确定”,删除模型。

    当模型列表未显示该模型,表示删除成功。

后续操作

常见问题

创建模型时,报错“Modelarts.6206:Key fields describing the model structure are missing from config.json, or their values are inconsistent with standard open source”如何处理?

您可以按照以下步骤进行排查:

  1. 查看config.json文件是否存在。
  2. 查看config.json文件格式是否符合要求。关于格式要求,请参见Hugging Face官网

相关文档