首页 > 其他分享 >训练好的模型怎么使用(非常详细),零基础入门到精通,看这一篇就够了

训练好的模型怎么使用(非常详细),零基础入门到精通,看这一篇就够了

时间:2024-11-07 18:45:31浏览次数:3  
标签:精通 入门 训练 AI 模型 就够 dict model 加载

前言

“ 训练大模型的目的,就是为了解决业务问题”

学习机器学习的人大部分都知道怎么设计并训练一个模型,但开发模型的目的是为了解决业务问题,所以怎么使用大模型也是重中之重。

刚训练好的大模型事实上虽然可以用,但由于没有用户接口,所以只能自己用,无法对外提供服务;所以,刚训练好的大模型需要经过一些处理才可以使用,包括数据预处理,接口开发等。

huggingface官网地址:https://huggingface.co/models 需科学上网

在这里插入图片描述

01、大模型加载与保存

训练一个大模型,在训练完成之后最重要的就是要把模型给保存下,然后在使用的时候加载。

在什么情况下需要保存模型?

保存模型主要有两种情况,第一种是重新设计了一个新的模型,第二种是微调过的模型。

当然不论是何种原因,保存模型也有两种方式,一种是直接把模型进行保存,不论是模型本身还是模型参数。第二种是使用字典方式保存模型参数。

代码如下所示,这里使用的是pytorch自定义模型,如果是从网络中加载的其它模型,可以根据其具体的实现进行保存。

在这里插入图片描述

可能会有人有疑问,没有训练过的模型也可以保存吗?

虽然很多人都会使用别人训练好的模型,但有时我们只需要使用其模型结构,不需要其训练的参数,所以就会有人把没有训练过的模型进行保存。然后让别人可以用没用被数据“污染”过的新模型。

比如,pytorch从官网加载模型时就有一个参数,pretrained=false来加载未训练过的模型。当然,用户也可以选择训练过的模型进行微调。

模型的加载

模型既然可以被保存,那么就可以被加载。保存模型有两种方式,加载模型也有两种方式。

第一种方式保存就直接加载,而第二种方式保存就需要先创建一个模型,然后再加载。

需要注意的说,这里加载的是自定义模型,所以一定要把神经网络的结构给引入进来,下面代码的神经网络结构就是MyModel。否则会报错找不到模型,而如果是从网络中加载模型则不会出现这个问题。

在这里插入图片描述

02、使用模型的三种方式

使用模型大概有以下三种方式:

第一种方式是直接调用第三方模型服务公司的API接口,比如chatGPT的接口,通义千问接口和百度文心一言等接口。

这种方式最简单,也不需要懂得大模型的技术,只需要有编程基础会调用接口即可。

而后面两种其实是两种情况,就是自己部署大模型。

自己部署大模型分为两种情况,第一种是使用别人训练或微调好的模型,比如huggingface上的模型,pytorch官网提供的模型等;第二种是自己设计并训练模型。

两者的区别就是,第一种使用别人的模型,就需要按照别人的要求和规则去使用或训练模型。比如,它们可能会对模型进行简单的输入处理和API封装,我们自己也可以在其基础之上对模型进行更加完善的设计。

如下所示,是使用huggingface上的大模型。from_pretrained(model_id)就是从huggingface仓库中加载大模型。

from transformers import AutoTokenizer, AutoModelForCausalLM

# 大模型名词
model_id = "shenzhi-wang/Llama3-8B-Chinese-Chat"

# 加载分词器 在自然语言处理中,需要对文字进行分词 并转换为神经网络能够识别的向量格式
tokenizer = AutoTokenizer.from_pretrained(model_id)

# 加载大模型
model = AutoModelForCausalLM.from_pretrained(
    model_id, torch_dtype="auto", device_map="auto"
)


"""

 用户使用,按照大模型提供的输入案例来操作
 """
 messages = [
     {"role": "system", "content": "You are Llama3-8B-Chinese-Chat, which is finetuned on Llama3-8B-Instruct with Chinese-English mixed data by the ORPO alignment algorithm. You, Llama3-8B-Chinese-Chat, is developed by Shenzhi Wang (王慎执 in Chinese). You are a helpful assistant."},    
     {"role": "user", "content": "介绍一下你自己"},
]

# 数据预处理
input_ids = tokenizer.apply_chat_template(
    messages, add_generation_prompt=True, return_tensors="pt"
).to(model.device)

# 大模型只能识别向量格式的数据,所以在开始之前需要对数据进行预处理
outputs = model.generate(
    input_ids,    
    max_new_tokens=1024,    
    do_sample=True,    
    temperature=0.6,    
    top_p=0.9,
)

# 获取结果
response = outputs[0][input_ids.shape[-1]:]
print(tokenizer.decode(response, skip_special_tokens=True))

第二种自定义模型,我们就需要自己对大模型进行预处理和接口封装。

import torch  
from torch import nn  
\# 神经网络结构 当作例子没有具体实现  
class MyModel(nn.Module):  
    def \_\_init\_\_(self):  
        super(MyModel, self).\_\_init\_\_()  
        pass  
  
    def forward(self, x):  
        return x  
  
\# 创建一个模型对象  
model = MyModel()  
  
\# 第一种保存模型的方式  
torch.save(model, "my\_model.pth")  
  
\# 第二种保存模型的方式 使用dict字段保存参数  
torch.save(model.state\_dict(), "dict\_my\_model.pth")  
  
\# 第一种加载模型的方式 有了这个之后就不需要使用 model = MyModule()创建模型了  
load\_model = torch.load("my\_model.pth")  
print(load\_model)  
  
  
\# 第二种加载方式 这里只会加载模型的参数  
dict\_load = torch.load("dict\_my\_model.pth")  
print(dict\_load)  
  
\#  因此,需要先创建模型,再从字典中加载参数  
dict\_model = MyModel()  
dict\_model.load\_state\_dict(torch.load("dict\_my\_model.pth"))  
print("------------------")  
print(dict\_model)  
  
""" 数据预处理 """def process\_prefix(param):  
    \# params是输入参数,自然语言处理中就是字符串,计算机视觉处理中就是图片或视频  
    \# 把参数转换为张量/向量  
    inputs = torch.Tensor(param)  
    """  
        当然,这里只是简单举个例子,实际的预处理要比这复杂的多,不但要实现功能,还有保证接口的可扩展性,以及上层功能的调用  
    """    return inputs  
  
\# 把用户输入转化为向量后 输入到模型中  
resp = dict\_model(process\_prefix(""))  
  
def process\_post(resp):  
    """  
        这里主要对模型的输出进行处理,不同的模型输出数据格式不一,所以为了使用的方便,需要对模型输出进行处理  
    """  
  


总的来说,模型的使用就类似于模型设计中的输入层和输出层,由于每个模型的输入和输出都不一样,所以每个模型的输入和输出都需要进行特殊处理。

开发者对模型进行包装之后,就可以通过API接口或SDK的形式提供给业务人员调用。

零基础入门AI大模型

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

标签:精通,入门,训练,AI,模型,就够,dict,model,加载
From: https://blog.csdn.net/weixin_49892805/article/details/143567196

相关文章

  • CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了
    ![](https://img-blog.csdnimg.cn/direct/40c12407163545e89a5730feb5c1b5ad.png)一、CTF简介CTF(CaptureTheFlag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互......
  • 成为一名厉害的黑客,必须知道的12个步骤,黑客入门
    黑客攻防是一个极具魅力的技术领域,但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度,具备很深的计算机系统和操作系统知识,并乐意不断地去学习和进步。如果你想成为一名优秀的黑客,下面是10种最重要的基础条件,请认真阅读:1.了解黑客的思维方......
  • 这可能是最好的Spring教程!即便无基础也能看懂的入门Spring,仍在持续更新。
    开启这样一个系列的原因    这一段时间都在学spring,但是在学习的过程中一直都很难找到一个通俗易懂,又带了学习体系的文章教程,很多地方都不懂,需要自己去慢慢查询和理解,感觉学起来很耗时,所以我自己就像写一个这样能通俗易懂的Spring入门,让其他想我一样的小白也能速通入门。 ......
  • shell脚本入门——流程控制方法和代码
    Shell脚本是一种用于自动化任务和管理系统的强大工具。在编写Shell脚本时,流程控制(如条件判断、循环等)是最基础也是最重要的部分之一。以下是一些常用的Shell流程控制结构:1.条件判断(if语句)Shell脚本中的if语句用于根据条件判断执行不同的代码块。#!/bin/bash#判断文件......
  • 计算机基础学习(非常详细)零基础入门到精通,收藏这篇就够了
    一、计算机概述计算机历史与发展:了解计算机的起源、发展简史,包括第一台电子计算机ENIAC的诞生、冯·诺依曼提出的“存储程序”原理等。计算机分类:巨型计算机、大中型计算机、小型计算机、微型计算机(如PC)、工作站等。计算机特点与应用:指令周期快、运算精度高、可靠性高......
  • 使用C++和QT开发应用程序入门以及开发实例分享
    目录1、搭建开发环境(VS2010和QT4.8.2)2、创建一个QT窗口3、在QT窗口中添加子窗口4、QT界面布局5、QT信号(SIGNAL)和槽(SLOT)6、最后C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实......
  • 机器学习入门
    机器学习入门指南随着数据的爆炸式增长,机器学习(MachineLearning)逐渐成为了推动科技进步的重要力量。无论是在智能推荐、图像识别,还是自然语言处理领域,机器学习都展现出了强大的应用潜力。本文将为初学者提供一个机器学习的入门指南,包括基本概念、常用算法及实际案例。什么是......
  • 【网络安全渗透测试零基础入门】Vulnhub靶机Kioptrix level-4 多种姿势渗透详解,收藏这
    前言这是阳哥给粉丝盆友们整理的网络安全渗透测试入门阶段Vulnhub靶场实战阶段教程喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。环境配置服务版本探测:sudonmap-sT-sV-sC-O-p22,80,139,44522端口ssh服务以及openssh版本其他无特别信息80端口......
  • 21天全面掌握:小白如何高效学习AI绘画SD和MJ,StableDiffusion零基础入门到精通教程!快速
    今天给大家分享一些我长期以来总结的AI绘画教程和各种AI绘画工具、模型插件,还包含有视频教程AI工具,免费送......
  • Spring Boot 多数据源配置实战指南:从入门到精通
    引言在现代企业级应用开发中,往往需要同时访问多个数据库来满足不同的业务需求。SpringBoot作为一个快速开发的框架,提供了非常便捷的方式来配置和管理多数据源。本文将详细介绍如何在SpringBoot项目中配置多数据源,并通过实际代码示例展示其应用场景。一、为什么要配置多......