跳到主要内容

开发并部署 AI 应用

应用引擎简介

  • Gitee AI 的应用引擎 可以自由编写任何程序,您可以使用 Python、JavaScript、HTML、Go、Java、Ruby、PHP、Rust、C++ 等任何编程语言,使用 Dockerfile 高度自定义构建您的应用。
  • 借助 AI 模型能力,您可以构建一个创意十足、功能强大的 Web 程序。您可以通过 transformers 、diffusers 库加载 Gitee AI 模型,也可以使用 HTML、JS 等任意编程语言构建界面、调用 Gitee AI 模型引擎 或其他渠道提供的 API 服务。
  • 在线部署后,可通过浏览器直接访问、分享您的应用、推广您自己的模型、创意,而无需考虑服务器、算力资源、域名、部署等复杂繁琐问题。

前往新建应用!

Hello Gitee AI!

1. 新建应用

前往新建应用界面,填写应用名称、地址、这里选择应用 SDK 为 Gradio, 这里选择免费 2 核 4G 算力,最后点击“新建应用”。

SDK 说明:

  • Gradio:您的应用将预设一个 Gradio,它是一个 Python 库,常用于快速构建 AI 应用的用户界面。 您的程序需要 app.py 作为入口,并运行在 7860 端口
  • Streamlit:您的应用将预设一个 Streamlit,它是一个 Python 库,常用于快速构建数据应用的用户界面。您的程序需要 app.py 作为入口,并运行在 7860 端口
  • Docker:您可以使用 Dockerfile 来高度自定义您的应用。您的程序需要运行在 7860 端口
  • Static:纯前端的浏览器程序,您可以上传静态文件,如 HTML、JS、CSS 等,以 index.html 作为程序入口,常用于使用 JS 调用 API 服务,构建 AI 应用。

新建应用

2. 应用初始界面

新建应用后,您将看到应用的初始界面,您可以在这里查看您的应用信息、代码、git 仓库信息、日志、设置等。

gradio没有入口文件

  • 您可以选择 git 克隆代码仓库到本地,编写代码后推送到 Gitee AI 仓库,或者直接在"文件" 中在线编辑代码。本次教程使用 git 克隆。

执行 git clone git@ai.gitee.com:stringify/Hello_Gitee_AI 将仓库克隆到您的设备。

使用 SSH 克隆,如未配置 Gitee SSH 公钥,请 前往添加 Gitee SSH 公钥

3. 创建入口文件、提交文件到 Gitee AI

在代码仓库根目录下创建 app.py 文件,写入以下代码:

import gradio as gr
def greet(name):
return "Hello " + name + "!!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch(server_name='0.0.0.0', server_port=7860)

提交并推送代码到 Gitee AI 仓库

git add app.py
git commit -m "创建 app.py 文件"
git push
4. 应用代码更新提示

应用代码已推送到 Gitee AI,刷新界面,顶部会看到提示重启应用

重启应用后,您的应用将重新构建、部署,您可以在日志中查看相关信息。 修改代码或出现系统异常后,您也可以进入设置-功能界面,点击出厂重启,更新应用。

重启提示

5. 点击立即重启

稍等片刻,您的应用将部署,您可以在日志中查看部署进度。

代码更新后,重启应用将进入 Building 状态,稍等片刻刷新页面可看应用状态显示 Running on CPU,即启动成功。

  • 应用状态说明:

    状态名称描述
    No_app_file应用没有入口文件
    Building应用正在拉取代码、构建中
    Readying应用正在准备中,可能是正在执行仓库代码、下载模型
    Running on CPU应用运行在 CPU 算力上
    Running on Nvidia A10应用运行在 Nvidia A10 显卡算力上
    Pending应用正在等待中,可能是正在分配资源中、资源不足
    Paused用户手动暂停应用
    Stopped应用异常停止,可能是系统或代码出现异常
    Runtime_error应用运行时出现错误,可能是代码或系统错误
    SLEEPING应用休眠中,满足休眠倒计时

应用日志

6. 应用部署成功!查看应用界面:

Alt text

中文古诗生成器

前面只是小试牛刀,现在尝试真正的 AI 能力:

1. 修改 app.py 代码

现在,您可以尝试使用 Gitee AI 模型库中的模型,如中文古诗生成器,将下面代码替换到 app.py 中:

import torch # 导入 PyTorch 库,用于深度学习任务。
import gradio as gr # 导入Gradio库,用于构建交互式界面。
import torch.nn.functional as F
from transformers import BertTokenizer, GPT2LMHeadModel # 从transformers库中导入BertTokenizer和GPT2LMHeadModel,用于自然语言处理和文本生成任务。

# Gitee AI 支持 transformers diffusers 等库,您可以直接使用 Gitee AI 模型库中的模型,前往 https://ai.gitee.com/models 查看更多模型。您也可以使用其他方式下载模型(例如 git 克隆、其他源下载)
tokenizer = BertTokenizer.from_pretrained("hf-models/gpt2-chinese-poem") # 用预训练的 BertTokenizer 加载中文诗歌生成模型的tokenizer。
model = GPT2LMHeadModel.from_pretrained("hf-models/gpt2-chinese-poem") # 使用预训练的GPT-2模型加载中文诗歌生成模型。
model.eval() # 将模型设置为评估模式,保证推理阶段的一致性、稳定性和效率。评估模式与训练模式相对应。

# 定义了一个函数,用于对模型输出的logits进行top-k和top-p过滤:
# 确保在生成文本时,只有概率最高的几个token被考虑,提高生成文本的质量和连贯性。
def top_k_top_p_filtering(logits, top_k=0, top_p=0.0, filter_value=-float('Inf')):
assert logits.dim() == 1
top_k = min(top_k, logits.size(-1))
if top_k > 0:
indices_to_remove = logits < torch.topk(logits, top_k)[0][..., -1, None]
logits[indices_to_remove] = filter_value
if top_p > 0.0:
sorted_logits, sorted_indices = torch.sort(logits, descending=True)
cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)
sorted_indices_to_remove = cumulative_probs > top_p
sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()
sorted_indices_to_remove[..., 0] = 0
indices_to_remove = sorted_indices[sorted_indices_to_remove]
logits[indices_to_remove] = filter_value
return logits
# 定义了生成函数,接受一个输入文本,然后利用 AI 模型生成新文本。
def generate(input_text):
input_ids = [tokenizer.cls_token_id]
input_ids.extend( tokenizer.encode(input_text, add_special_tokens=False) )
input_ids = torch.tensor( [input_ids] )
generated = []
for _ in range(100):
output = model(input_ids)
next_token_logits = output.logits[0, -1, :]
next_token_logits[tokenizer.convert_tokens_to_ids('[UNK]')] = -float('Inf')
filtered_logits = top_k_top_p_filtering(next_token_logits, top_k=8, top_p=1)
next_token = torch.multinomial( F.softmax(filtered_logits, dim=-1), num_samples=1 )
if next_token == tokenizer.sep_token_id:
break
generated.append( next_token.item() )
input_ids = torch.cat((input_ids, next_token.unsqueeze(0)), dim=1)
return input_text + "".join( tokenizer.convert_ids_to_tokens(generated) )
examples = [["不堪翘首暮云中"], ["开源中国"], ["行到水穷处"], ["王师北定中原日"] ,["雪"], ["海上升明月"], ["十年磨一剑"]]

# 创建一个 Gradio 接口,用于接收用户输入,调用 generate 函数生成文本,并返回生成的文本。Gradio 默认启动到 7860 端口。
if __name__ == "__main__":
gr.Interface(fn=generate, inputs="text", outputs="text",examples=examples).queue().launch()
2. 添加 requirements.txt 文件

app.py 代码除了使用到您选择的预设 SDK 中的 Gradio, 还使用到其他库。 在代码仓库根目录下创建 requirements.txt 文件,写入以下代码提交到仓库:

--extra-index-url https://mirrors.cloud.tencent.com/pypi/simple
torch
transformers

您也可以自定义依赖库版本。Gitee AI 加速依赖下载默认使用了镜像源,您也可自定义替换为其他源:

--extra-index-url https://mirrors.cloud.tencent.com/pypi/simple
gradio==4.26.0
torch
transformers
3. 更新代码后点击页面顶部的"立即重启"按钮或进入设置-功能界面点击"出厂重启",即可查看应用效果。

输入 十年磨一剑 AI 输出 十年磨一剑,未试请长缨。马上高歌起,风尘事不平。

中文诗生成器

至此,您已经成功构建了一个中文古诗生成器应用!您还可以进入应用设置中升级硬件配置、调整应用信息、添加环境变量、秘钥等。

更多应用示例