国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端

這篇具有很好參考價值的文章主要介紹了從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

項目介紹:

Firefly(流螢)?是yangjianxin開發(fā)的開源的中文大語言模型項目,本文主要實現(xiàn)將此模型部署到http服務器上,語言實現(xiàn):python,本項目為雙創(chuàng)項目后端部分代碼(本人根據(jù)firefly訓練代碼修改+微調的模型暫不方便開源),樣例模型改用firefly1b4模型

項目環(huán)境:

1.pytorch:2.0.1+cpu

2.transformers:4.29.1

3.httpserver庫

例外:requests庫(如果不接其他api不需要)

模型下載:YeungNLP (YeungNLP) (huggingface.co)

下載后新建model文件夾將下載的所有文件放入文件夾,如下圖所示

從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端,bat+python學習筆記,語言模型,人工智能,自然語言處理

打開config.json,將torch_dtype的值改為int8,可以有效降低卡頓(尤其適用于cpu版本)

硬件環(huán)境:

由于是模型的使用,除了推理的時候不會很吃Cpu/Gpu,加載模型比較吃內存,目前經(jīng)過測試發(fā)現(xiàn)實際運行,8G可以勉強運行模型,但是有大概率導致整機卡死,建議至少達到12G內存

項目開發(fā)環(huán)境:Cpu:i58400,內存:16G(此配置下運行模型再跑androidstudio+非androidstudio自帶的模擬器也是搓搓有余的)


代碼部分:

1.導入包:

print("導入requests庫中...")
import requests
print("導入http庫中...")
import http.server
print("導入json庫中...")
import json
print("導入os庫中...")
import os
print("導入time庫中...")
import time
print("導入urllib庫中...")
import urllib
import random
from urllib import parse
print("導入transformers庫中...")
from transformers import BloomTokenizerFast, BloomForCausalLM
print("導包完成=====================")

2.RequestHandlerImpl類部分(httpserver)?

class RequestHandlerImpl(http.server.BaseHTTPRequestHandler):

    

    def do_GET(self):
        get_str=""
        get_cmd=self.requestline[5:self.requestline.find("HTTP/1.1")]
        self.send_response(200)
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()
        get_str=checkget(get_cmd,self.headers)
        if get_str=="":get_str= "Hello World\n"
        self.wfile.write(get_str.encode("utf-8"))
        
                         

        

    def do_POST(self):
        req_body = self.rfile.read(int(self.headers["Content-Length"])).decode()
        self.send_response(200)
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.end_headers()
        get_str=checkpost(self.path,req_body)
        self.wfile.write(get_str.encode("utf-8"))

3.項目函數(shù)部分(由于是app后端有接入其他接口):

def get_answer(text): 
    print("得到新問題",text)
    input_ids = tokenizer(text, return_tensors="pt").input_ids
    input_ids = input_ids.to(device)
    outputs = model.generate(input_ids, max_new_tokens=200, do_sample=True, top_p=0.85, temperature=0.35,repetition_penalty=1.2, eos_token_id=tokenizer.eos_token_id)
    rets = tokenizer.batch_decode(outputs)
    output = rets[0].strip().replace(text, "").replace('</s>', "")
    return format(output)


def get_list(parm): #新聞類接口,可以發(fā)布
    parm=parm[1:]
    get_tx=parm.split("&")
    name="福州"
    page="0"

    for i in range(0, len(get_tx)):
        if get_tx[i][0:5]=="name=":
            name=get_tx[i][5:]
            
        if get_tx[i][0:5]=="page=":
            page=get_tx[i][5:].replace(' ', '')

    url = "https://v.api.aa1.cn/api/api-tplist/go.php/api/News/local_news?name=" +  name + "&page=" + page
    print(url)
    response = requests.get(url)
    content = response.text
    return content


def get_top(): #百度熱搜接口
    url ='https://v.api.aa1.cn/api/topbaidu/index.php'
    response = requests.get(url)
    content = response.text
    return content


def get_weather(): #天氣類接口(付費的)
    url ='http://apis.juhe.cn/simpleWeather/query?city=%E7%A6%8F%E5%B7%9E&key=需要自己加上'
    response = requests.get(url)
    content = response.text
    return content
  
def login(up): #登錄接口
    get_tx=up.split("&")
    un=""
    pw=""
    code=0

    for i in range(0, len(get_tx)):
        if get_tx[i][0:5]=="user=":
            un=get_tx[i][5:]
            
        if get_tx[i][0:5]=="pass=":
            pw=get_tx[i][5:].replace(' ', '')
            
    print(un)
    print(pw)

    f=open('libaray/uw', encoding='gbk') #加載type字符庫
    for line in f:
        get_tx=line.split(",")
        
        if un==get_tx[0] and pw==get_tx[1].replace('\n', ''):
            dic = {'code': 200, 'msg': "登錄成功","token":token}
            break
        else:
            dic = {'code': 201, 'msg': "用戶名或密碼錯誤"}

    f.close()
    
    print(dic)
    return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))


def register(up):  #登錄接口
    get_tx=up.split("&")
    uw=""
    pw=""
    code=0
    
    for i in range(0, len(get_tx)): #這里和登錄類似,可以封裝起來,目的是獲取傳來的用戶,密碼
        if get_tx[i][0:5]=="user=":
            un=get_tx[i][5:]
        if get_tx[i][0:5]=="pass=":
            pw=get_tx[i][5:].replace(' ', '')

    print(un)
    print(pw)

    #加載uw密碼庫,后續(xù)可以寫成load函數(shù),在加載時候開啟
    f=open('libaray/uw', encoding='gbk')
    for line in f:
        get_tx=line.split(",")
        if un==get_tx[0]:
            dic = {'code': 201, 'msg':"用戶已存在"}
            return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))
    f.close()
    f=open('libaray/uw','a+')
    f.write(un+","+pw+"\n")
    dic = {'code': 200, 'msg':"注冊成功"}
    f.close()
    return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))
    
       
def checkpost(path,get_cmd): #查看post進來的數(shù)據(jù)
    if path=="/login":
        return login(get_cmd)

    if path=="/register":
        return register(get_cmd)
                   
def checkhead(head): #檢查需要加密的接口,傳進來的頭
    print(token == head.get("Authorization"))
    if  token == head.get("Authorization"):
        return True
    else:
        return False


def checkget(get_cmd="",head=""): #查看get進來的數(shù)據(jù)
    if get_cmd[0:9]=="question=":
        if checkhead(head): 
            dic = {'code': 200, 'msg':get_answer(parse.unquote(get_cmd[9:])),"prompt":urllib.parse.unquote(get_cmd[9:])}
            return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))  
        else:
            dic = {'code': 401, 'msg':"沒有權限"}
            return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))  
    if get_cmd[0:4]=="list": 
        if checkhead(head):
            return get_list(get_cmd[4:])
        else:
            dic = {'code': 401, 'msg':"沒有權限"}
            return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))
        
    if get_cmd[0:6]=="gettop": 
        if checkhead(head):
            return get_top()
        else:
            dic = {'code': 401, 'msg':"沒有權限"}
            return json.dumps(dic, sort_keys=True,ensure_ascii= False,indent=4, separators=(',', ':'))

    if get_cmd[0:7]=="weather": #免費api接口
        return get_weather()
            
    if get_cmd[0:6]=="login?": 
        gcmd=get_cmd[6:]
        return login(gcmd)

main:
?

print("加載tokenizer中")
tokenizer = BloomTokenizerFast.from_pretrained('model/')   #路徑以文件夾下的model為例
print("加載model中")
model = BloomForCausalLM.from_pretrained('model/')
model.eval()
device="cpu"
model = model.to(device) #用cuda或者cpu
print("tlc機器人已啟動")
token=''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEGHIJKLMNOPQRSTWVUXYZ!@#$%&',39))
print("加密為token=" + token) #這句加入是方便測試
local_ip="10.1.136.73" #local ip為服務器ip
server_address = (local_ip, 19999) 
httpd = http.server.HTTPServer(server_address, RequestHandlerImpl)
httpd.serve_forever()

接口測試:

1.運行代碼:

運行代碼后,如果提示如下圖所示就是沒有問題的了,可以看到有一個token=xxxx的參數(shù),這個參數(shù)是隨機生成的臨時token,目前設定是每次啟動服務端生成一次,這里為了方便演示打印出來,實際需要登錄接口來獲取,后續(xù)可以注釋掉

從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端,bat+python學習筆記,語言模型,人工智能,自然語言處理

2.測試接口是否可用:

如下圖所示在postman輸入http://10.1.136.73:19999/question=<s>你好</s></s>

由于輸出到模型的數(shù)據(jù)被格式化成<s></s>的形式,為方便客戶端傳遞歷史對話作為promat,我沒有在python格式化字符串,而是在客戶端里實現(xiàn)。

彈出401的提示是我們加入頭,無法通過驗證,但是可以證明http服務端可以正常跑起來


從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端,bat+python學習筆記,語言模型,人工智能,自然語言處理

?

3.加入頭繼續(xù)驗證:

在head加入?yún)?shù)名為Authorization,參數(shù)值為臨時生成的token的head再次運行。發(fā)現(xiàn)已可行,如下圖所示,發(fā)現(xiàn)客戶端正常返回json

從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端,bat+python學習筆記,語言模型,人工智能,自然語言處理

?code參數(shù):為200時正常,其他不正常,prompt是傳入的值,msg是出來的值。

多輪對話:

在實際測試中發(fā)現(xiàn)Firefly1b4的版本也是可以支持多輪對話的,但是效果的確會差些,我們只需要在外部把數(shù)據(jù)格式化成以下的形式:

<s>問題1</s></s>回答1</s></s>問題2</s></s>回答2</s></s>問題3</s></s>回答3</s></s>

以下是效果案例:

傳入的promat為<s>你知道北京嗎</s></s>北京市是中國的首都,位于中國北方。</s></s>那里有什么美食</s></s>烤鴨、炸醬面、豆汁、涮羊肉、豆腐腦等等。</s></s>有什么娛樂的地方</s></s>

輸出為長城、故宮博物院、頤和園、天壇、圓明園等。

?從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端,bat+python學習筆記,語言模型,人工智能,自然語言處理



Developed?by 福州機電工程職業(yè)技術學校 wh

郵箱聯(lián)系方式:xiaohui032901@foxmail.com

qq聯(lián)系方式:2151335401、3135144152文章來源地址http://www.zghlxwxcb.cn/news/detail-522570.html

到了這里,關于從0開始,部署基于yangjianxin開發(fā)的流螢(Firefly)中文對話式大語言模型的http服務端的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 應用實戰(zhàn)|從頭開始開發(fā)記賬本2:基于模板快速開始

    應用實戰(zhàn)|從頭開始開發(fā)記賬本2:基于模板快速開始

    上期視頻我們創(chuàng)建好了BaaS服務的后端應用。從這期視頻開始,我們將從頭開發(fā)一個互聯(lián)網(wǎng)記賬本應用。本期視頻我們介紹一下如何使用模板快速開啟我們的應用開發(fā)之旅。 應用實戰(zhàn)|從頭開始開發(fā)記賬本2:基于模板快速開始 本期視頻我們介紹了如何通過模板快速開始MemFi

    2024年04月17日
    瀏覽(28)
  • 從零開始的QQ開放平臺機器人-------Gensokyo框架部署運行開發(fā)教程合集

    從零開始的QQ開放平臺機器人-------Gensokyo框架部署運行開發(fā)教程合集

    大家好,我是早苗狐,一名有5年QQ機器人開發(fā)運營經(jīng)驗的機器人愛好者. 隨著QQ為機器人開放了越來越多的接口能力,基于QQ開放平臺Api能力的新框架逐漸應運而生, 本文就帶給大家如何通過一系列操作,部署,運行,維護和開發(fā)一個新的QQ機器人. QQ開放平臺地址: QQ開放平臺 QQ開放平臺

    2024年02月03日
    瀏覽(50)
  • 基于Windows系統(tǒng)的Hadoop偽分布式模式部署-從零開始(我的學習記錄)

    基于Windows系統(tǒng)的Hadoop偽分布式模式部署-從零開始(我的學習記錄)

    目錄 前言 一.JDK的下載安裝配置 1.JDK 下載 2.JDK 安裝 3.JDK 環(huán)境變量配置 4.驗證JDK安裝是否成功 5.重點? 二.Hadoop部署以及工具集winutils 1.下載Hadoop解壓/下載winutils以及\\\"安裝\\\" ? ? ? ? 下載Hadoop和winutils ????????\\\"安裝\\\"winutils 2.配置Hadoop環(huán)境變量/配置Hadoop文件 Hadoop配置環(huán)境變量

    2024年04月13日
    瀏覽(30)
  • 玩轉 PI 系列-看起來像服務器的 ARM 開發(fā)板矩陣-Firefly Cluster Server

    玩轉 PI 系列-看起來像服務器的 ARM 開發(fā)板矩陣-Firefly Cluster Server

    基于我個人的工作內容和興趣,想要在家里搞一套服務器集群,用于容器/K8s 等方案的測試驗證。 考慮過使用二手服務器,比如 Dell R730, 還搞了一套配置清單,如下: Dell R730 3.5 尺寸規(guī)格硬盤 CPU: 2686v4*2 內存:16g*8 存儲:480Gintel ssd 系統(tǒng)盤 + 6tsas 希捷* 2 個數(shù)據(jù)盤 RAID 卡:h73

    2024年02月11日
    瀏覽(17)
  • 基于PyTorch的中文情緒分析器設計與開發(fā)

    基于PyTorch的中文情緒分析器設計與開發(fā)

    收藏和點贊,您的關注是我創(chuàng)作的動力 ?? 情感分析在最近的十年內得到了快速的發(fā)展,這歸功于大數(shù)據(jù)的支持。相較于英語而言,中文的使用同樣廣泛。如何把握中文里的情感也是服務行業(yè)所關注的問題。本文旨在研究中文情緒分析的設計與開發(fā),意在基于Pytorch平臺,利

    2024年02月06日
    瀏覽(24)
  • windows環(huán)境基于Elasticsearch8.4.0的IK中文分詞器的安裝、部署、使用

    windows環(huán)境基于Elasticsearch8.4.0的IK中文分詞器的安裝、部署、使用

    目錄 問題現(xiàn)象: 解決方法: 1、下載IK中文分詞器 2、部署 3、使用 前言(選看) ? ? ? 最近在重溫Elasticsearch,看來一下官網(wǎng),都出到8.4.3版本了。想當初學的時候用的還是5.6.8,版本更新了很多意味著有大變動。 ????????? windows環(huán)境基于Elasticsearch8.4.0的IK中文分詞器的安

    2024年02月13日
    瀏覽(33)
  • firefly開發(fā)板RK3588非默認外設使能(串口uart、IIC、adc等)設備樹修改詳細步驟

    firefly開發(fā)板RK3588非默認外設使能(串口uart、IIC、adc等)設備樹修改詳細步驟

    sdk獲取和內核編譯,參考上一篇博文:rk3588內核裁剪 文件1: 此文件是針對firefly的板級設備樹文件。 文件2: 此文件是關于io復用的設備樹文件。 文件3: 此文件是所有具有復用功能的gpio,例如:#define RK_PA4 4 代表的是GPIO_PA_4即A組的GPIO4。 官方的內核和設備樹,默認打開了串

    2024年02月09日
    瀏覽(101)
  • 新書速覽|從零開始大模型開發(fā)與微調:基于PyTorch與ChatGLM

    新書速覽|從零開始大模型開發(fā)與微調:基于PyTorch與ChatGLM

    詳細講解大模型基本理論、算法、程序實現(xiàn)與應用實戰(zhàn),揭示大模型開發(fā)與微調技術 1 本書內容 大模型是深度學習自然語言處理皇冠上的一顆明珠,也是當前AI和NLP研究與產(chǎn)業(yè)中最重要的方向之一。本書使用 PyTorch 2.0作為學習大模型 的基本框架,以 ChatGLM為例 詳細講解大模型

    2024年01月17日
    瀏覽(27)
  • Windows 11 上從零開始基于 wsl-ubuntu 搭建 AI 學習環(huán)境及部署多種私有 ChatGPT

    今天(2023/6/2)剛剛換了 1 塊 4TB 的硬盤,在 Windows 11 上從零開始,基于 Windows Subsystem for Linux 搭建一套 AI 學習環(huán)境。 其中包括,安裝 Python、安裝 Miniconda3、安裝 CUDA Toolkit、安裝 git lfs、配置 Hugging Face 的緩存路徑、本地部署 ChatGLM-6B、本地部署 VisualGLM-6B等等內容。 安裝 Ubuntu-

    2024年02月07日
    瀏覽(20)
  • 手把手教你如何免費Midjourney Adobe FireFly AI繪圖—Window本地快速部署stable diffusion AI繪圖及使用指南(小白也能學會)

    手把手教你如何免費Midjourney Adobe FireFly AI繪圖—Window本地快速部署stable diffusion AI繪圖及使用指南(小白也能學會)

    最近看到朋友圈最近各種文字生圖、圖生圖,眼花繚亂的圖片AI生成,我也心動了,于是趕緊研究了下目前業(yè)內認為最強大的 Midjourney、Adobe FireFly ,本來想試用下,奈何全球人民太熱情了, Midjourney 被薅羊毛薅的不行了,原本 Midjourney 剛注冊可以免費玩25次,現(xiàn)在也被Midjour

    2024年02月04日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包