成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大模型訓練完成之后可以直接使用嗎?該怎么使用訓練好的大模型? 原創

發布于 2024-7-17 06:59
瀏覽
0收藏

學習機器學習的人大部分都知道怎么設計并訓練一個模型,但開發模型的目的是為了解決業務問題,所以怎么使用大模型也是重中之重。

剛訓練好的大模型事實上雖然可以用,但由于沒有用戶接口,所以只能自己用,無法對外提供服務;所以,剛訓練好的大模型需要經過一些處理才可以使用,包括數據預處理,接口開發等。

huggingface官網地址:https://huggingface.co/models 需科學上網

大模型訓練完成之后可以直接使用嗎?該怎么使用訓練好的大模型?-AI.x社區

01、大模型加載與保存

訓練一個大模型,在訓練完成之后最重要的就是要把模型給保存下,然后在使用的時候加載。

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

保存模型主要有兩種情況,第一種是重新設計了一個新的模型,第二種是微調過的模型。

當然不論是何種原因,保存模型也有兩種方式,一種是直接把模型進行保存,不論是模型本身還是模型參數。第二種是使用字典方式保存模型參數。

代碼如下所示,這里使用的是pytorch自定義模型,如果是從網絡中加載的其它模型,可以根據其具體的實現進行保存。

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")

可能會有人有疑問,沒有訓練過的模型也可以保存嗎?

雖然很多人都會使用別人訓練好的模型,但有時我們只需要使用其模型結構,不需要其訓練的參數,所以就會有人把沒有訓練過的模型進行保存。然后讓別人可以用沒用被數據“污染”過的新模型。

比如,pytorch從官網加載模型時就有一個參數,pretrained=false來加載未訓練過的模型。當然,用戶也可以選擇訓練過的模型進行微調。

模型的加載

模型既然可以被保存,那么就可以被加載。保存模型有兩種方式,加載模型也有兩種方式。

第一種方式保存就直接加載,而第二種方式保存就需要先創建一個模型,然后再加載。

需要注意的說,這里加載的是自定義模型,所以一定要把神經網絡的結構給引入進來,下面代碼的神經網絡結構就是MyModel。否則會報錯找不到模型,而如果是從網絡中加載模型則不會出現這個問題。

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)

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探索時代 作者:DFires

原文鏈接:??https://mp.weixin.qq.com/s/8ThSarUkwOgJ46lTAvCJWQ??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2024-7-17 07:00:23修改
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 亚洲精品日韩在线 | 欧美一区二区 | 成人高清网站 | av免费在线播放 | 2019精品手机国产品在线 | 国产精品永久久久久久久www | 成人免费久久 | 国产高清在线 | 欧美综合一区二区三区 | 99久久久久国产精品免费 | av在线一区二区三区 | 亚州激情| 精品一区二区在线视频 | 中文字幕欧美一区二区 | aa级毛片毛片免费观看久 | 国精产品一品二品国精在线观看 | 精品国产乱码久久久久久88av | 色毛片 | 精品国产一区二区三区性色 | 国产高清在线 | 欧美日韩在线一区 | 人干人人 | 国产精品久久久久久吹潮 | 午夜91| 91在线最新 | 亚洲色视频 | 日韩在线播放中文字幕 | 日韩一区二区三区四区五区 | 91麻豆产精品久久久久久夏晴子 | 激情a| 九九热在线视频免费观看 | 国内精品久久久久久 | 欧美三级成人理伦 | 久久久久久亚洲精品 | 成人av免费看 | 国产激情一区二区三区 | 午夜不卡福利视频 | 国产综合av | 久久精品视频免费看 | 国产99小视频 | 天天爽夜夜操 |