只需三分钟,让大家都能体验到AI写文章的乐趣!

之前写过一个教程,教大家如何自己训练出一个文本生成的模型,然后用LightSeq来加速推理:

但是,训练好模型之后,别人如果没有显卡的话,就没法体验到快乐了呀!有一个办法,那就是把模型部署在GPU服务器上,然后别人直接发送请求进行访问就行了。更进一步,还可以做成网页,更方便互动!

这里分享一下我本地搭建的网页地址(72小时有效):
https://5858f0fd82132295.gradio.app

申请GPU服务器

这里我发现了一个能白嫖的GPU服务器:
https://www.autodl.com

注册送10块钱,只需要申请一个便宜点的GPU就行了,几毛钱每小时。但一定要注意了,如果用的是int8量化模型,一定要选择计算能力>=7.5的显卡!下面的表格可以查看NVIDIA所有显卡的计算能力:
en.wikipedia.org/wiki/C

服务端部署

按照之前的教程,训练并导出模型之后,就可以用LightSeq进行部署了。

用ssh连接服务器之后,安装一些必要的python库:

pip3 install lightseq transformers

然后就可以开始部署了,下面是一个简单的服务端代码。这个代码从6006端口接收用户请求,然后转换成id,送给LightSeq推理,最后还原成文本,发送回去。

import os
import socket
import threading
import time
from transformers import BertTokenizer
import lightseq.inference as lsi

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 6006))
s.listen(5)

os.system("wget -nc https://zenodo.org/record/7233565/files/aiai97.hdf5")
tokenizer = BertTokenizer.from_pretrained("uer/gpt2-chinese-cluecorpussmall")
model = lsi.QuantGpt("aiai97.hdf5", 16)

def tcplink(sock, addr):
    print('Accept new connection from %s:%s...' % addr)
    while True:
        data = sock.recv(1024)
        if not data or len(data.decode('utf-8')) <= 0:
            break
        time.sleep(1)
        print(data.decode('utf-8'))
        inputs_ids = tokenizer([data.decode('utf-8')], return_tensors="pt", padding=True)["input_ids"]
        ls_res_ids = model.sample(inputs_ids)
        ls_res = tokenizer.batch_decode(ls_res_ids, skip_special_tokens=True)
        res = ''.join(ls_res[0].split())
        print(res)
        sock.send(res.encode('utf-8'))
    sock.close()
    print('Connection from %s:%s closed.' % addr)

while True:
    sock, addr = s.accept()
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()

客户端请求

然后任何人就可以使用起来啦!控制台可以看到公网域名和端口号:

ea9dd368996cf0b607c0b0352d20f410.jpeg

然后在任意电脑上,用下面代码就可以请求啦:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('region-4.autodl.com', 40977))
s.send(input("请输入句子前缀:\n").encode('utf-8'))
print(s.recv(1024).decode('utf-8', 'ignore'))
s.close()

注意这里的域名和端口号改成你自己的,然后运行得到结果:

240463ebb81419475d20fac47bcb806d.jpeg

网页互动

如果你觉得命令行黑漆漆的不方便,那也可以做一个网页,给别人更好的体验!

首先安装gradio库:

pip3 install gradio

然后客户端代码改成下面这样就行了:

import socket
import gradio as gr

def predict(text):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('region-4.autodl.com', 40977))
    s.send(text.encode('utf-8'))
    res = s.recv(1024).decode('utf-8', 'ignore')
    s.close()
    return res

gr.Interface(fn=predict,
             inputs=["text"],
             outputs=["text"]).launch(share=True)

然后运行就可以看到下面提示:

357cc9e204d90d49a1bd162d21c2b002.png

这里会显示一个内网ip和公网地址,公网地址可以分享给你的小伙伴体验,打开后是这样的:

94c2843fe8f0d93d7355687dc446dc00.jpeg

这里分享一下我本地搭建的网页地址(72小时有效):
https://5858f0fd82132295.gradio.app

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以,以下是5个关于档案学和历史主义精神的三分钟视频的脚本: 1. 档案学的意义和作用 档案学是一门研究如何管理、保存、利用和研究各种类型档案的学科。档案是人类文明的重要组成部分,记录了人类的历史、文化和社会生活,是后代了解过去的重要途径。档案学的发展与人类社会文明的进步密不可分。 2. 档案学的基本原理和方法 档案学的基本原理和方法包括:收集、整理、保存、利用和研究档案资料。其中,收集是指对各种类型的档案进行收集和整理,整理是指对档案进行分类、编目和加工,保存是指对档案进行合理的保存和保护,利用是指将档案资料应用于各种领域,研究是指对档案资料进行深入的学术研究。 3. 历史主义精神的内涵和特点 历史主义精神是一种注重历史、尊重历史、研究历史的思想和精神。它强调历史的连续性和发展规律,认为历史是人类经验的积累和文化传承的重要途径。历史主义精神追求真理,反对主观臆断和片面偏见,注重历史的客观性和科学性。 4. 档案学与历史主义精神的关系 档案学与历史主义精神密不可分。档案是历史的载体,档案学的发展也是历史的反映。历史主义精神强调历史的客观性和科学性,档案学也要求对档案进行科学的研究和利用,以实现对历史的真实反映和理解。 5. 档案学和历史主义精神的现实意义 档案学和历史主义精神的现实意义在于,它们为我们了解历史、认识历史提供了重要的基础和途径。只有通过档案学和历史主义精神的研究和应用,我们才能更好地把握历史的发展规律和内在联系,更好地认识和把握历史的脉络,更好地为人类社会的发展和进步做出贡献。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值