diff --git a/docs/apps/getting-started/app-log.png b/docs/apps/getting-started/app-log.png new file mode 100644 index 0000000000000000000000000000000000000000..247408b83d50e5b11fe8115691d51b9364f5782a Binary files /dev/null and b/docs/apps/getting-started/app-log.png differ diff --git a/docs/apps/getting-started/app-no-app-file.png b/docs/apps/getting-started/app-no-app-file.png new file mode 100644 index 0000000000000000000000000000000000000000..cef767f2aa5e8caca395673f51c41736512051d7 Binary files /dev/null and b/docs/apps/getting-started/app-no-app-file.png differ diff --git a/docs/apps/getting-started/app-poem.png b/docs/apps/getting-started/app-poem.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3e25df20c993da8b09868fa0a28de2078ac5de Binary files /dev/null and b/docs/apps/getting-started/app-poem.png differ diff --git a/docs/apps/getting-started/app-restart.png b/docs/apps/getting-started/app-restart.png new file mode 100644 index 0000000000000000000000000000000000000000..8f486a987e4562c13a0e48ccb4d44a792369ec90 Binary files /dev/null and b/docs/apps/getting-started/app-restart.png differ diff --git a/docs/apps/getting-started/app-running.png b/docs/apps/getting-started/app-running.png new file mode 100644 index 0000000000000000000000000000000000000000..35486b7a55f16e3ca7c283c282839b036f9a966e Binary files /dev/null and b/docs/apps/getting-started/app-running.png differ diff --git a/docs/apps/getting-started/new-app.png b/docs/apps/getting-started/new-app.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6570743688db46971a5207b070be8b289f77fe Binary files /dev/null and b/docs/apps/getting-started/new-app.png differ diff --git a/docs/getting-started/app.md b/docs/getting-started/app.md index 6196d3754242a77fa86bd681c21472e737c2b506..016db0ce3803b22150da19acbe998d8b11ff9028 100644 --- a/docs/getting-started/app.md +++ b/docs/getting-started/app.md @@ -1,3 +1,179 @@ # 开发并部署 AI 应用 -TODO \ No newline at end of file +## 应用引擎简介 +- Gitee Ai 的**应用引擎** 可以自由编写任何程序,您可以使用 Python、JavaScript、HTML、Go、Java、Ruby、PHP、Rust、C++ 等任何编程语言 或者 Dockerfile 来构建您的应用。 +- 借助 AI 模型能力,您可以构建一个创意十足、功能强大的 Web 程序。您可以通过 transformers 、diffusion 库加载 [Gitee AI 模型](https://ai.gitee.com/models),也可以使用 HTML、JS 等任意编程语言构建界面、调用 [Gitee AI 模型引擎](https://ai.gitee.com/endpoints) 或其他渠道提供的 API 服务。 +- 在线部署后,可通过浏览器直接访问、分享您的应用、推广您自己的模型、创意,而无需考虑服务器、算力资源、域名、部署等复杂繁琐问题。 + +[前往新建应用!](https://ai.gitee.com/apps/new) + +## 实战 - Hello Gitee AI! + +##### 1. 新建应用 + + 前往[新建应用](https://ai.gitee.com/apps/new)界面,填写应用名称、地址、这里选择应用 SDK 为 Gradio, 这里选择免费 2 核 4G 算力,最后点击“新建应用”。 + +> SDK 说明: +> - Gradio:您的应用将预设一个 Gradio,它是一个 Python 库,常用于快速构建 AI 应用的用户界面。 **您的程序需要 app.py 作为入口,并运行在 7860 端口**。 +> - Streamlit:您的应用将预设一个 **Streamlit**,它是一个 Python 库,常用于快速构建数据应用的用户界面。**您的程序需要 app.py 作为入口,并运行在 7860 端口**。 +> - Dockerfile:您可以自定义 Dockerfile 来构建您的应用。**您的程序需要运行在 7860 端口**。 +> - Static:纯前端的浏览器程序,您可以上传静态文件,如 HTML、JS、CSS 等,**以 index.html 作为程序入口**,常用于使用 JS 调用 API 服务,构建 AI 应用。 + +![新建应用](../apps/getting-started/new-app.png) + +##### 2. 应用初始界面 + + 新建应用后,您将看到应用的初始界面,您可以在这里查看您的应用信息、代码、git 仓库信息、日志、设置等。 + +![gradio没有入口文件](../apps/getting-started/app-no-app-file.png) + +- 您可以选择 git 克隆代码仓库到本地,编写代码后推送到 Gitee Ai 仓库,或者直接在"文件" 中在线编辑代码。本次教程使用 git 克隆。 + +执行 `git clone git@ai.gitee.com:stringify/Hello_Gitee_AI` 将仓库克隆到您的设备。 + +> 使用 SSH 克隆,如未配置 Gitee SSH 公钥,请 [前往添加 Gitee SSH 公钥](https://gitee.com/profile/sshkeys) + +##### 3. 创建入口文件、提交文件到 Gitee Ai + + 在代码仓库根目录下创建 app.py 文件,写入以下代码: + +```python +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 +git add app.py +git commit -m "创建 app.py 文件" +git push +``` +##### 4. 应用代码更新提示 +应用代码已推送到 Gitee AI,刷新界面,顶部会看到提示重启应用 + +> 重启应用后,您的应用将重新构建、部署,您可以在日志中查看相关信息。 +> 修改代码或出现系统异常后,您也可以进入**设置-功能**界面,点击出厂重启,更新应用。 + +![重启提示](../apps/getting-started/app-restart.png) + +##### 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|应用运行时出现错误,可能是代码或系统错误| + + + +![应用日志](../apps/getting-started/app-log.png) + +##### 6. 应用部署成功!查看应用界面: +![Alt text](../apps/getting-started/app-running.png) + + +## 中文古诗生成器 +前面只是小试牛刀,现在尝试真正的 AI 能力, + +1. 修改 app.py 代码 +现在,您可以尝试使用 Gitee Ai 模型库中的模型,如中文古诗生成器,将下面代码替换到 app.py 中: + +```python +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 diffusion 等库,您可以直接使用 Gitee AI 模型库中的模型,前往 https://ai.gitee.com/models 查看更多模型。您也可以使用其他方式下载模型(例如 git 克隆、其他源下载) +tokenizer = BertTokenizer.from_pretrained("modelee/gpt2-chinese-poem") # 用预训练的 BertTokenizer 加载中文诗歌生成模型的tokenizer。 +model = GPT2LMHeadModel.from_pretrained("modelee/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 输出 `十年磨一剑,未试请长缨。马上高歌起,风尘事不平。` +![中文诗生成器](../apps/getting-started/app-poem.png) + +至此,您已经成功构建了一个中文古诗生成器应用!您还可以进入应用设置中升级硬件配置、调整应用信息、添加环境变量、秘钥等。 + +### 更多应用示例 +- [应用首页](https://ai.gitee.com/apps) +- [中文古诗生成器](https://ai.gitee.com/apps/stringify/gpt2-chinese-poem-app) +- [Animagine-xl: Gradio + GPU](https://ai.gitee.com/apps/stringify/Animagine-xl) +- [SDXL-Turbo: Gradio + GPU](https://ai.gitee.com/apps/stringify/SDXL-Turbo) +- [物体检查: 静态页面 Static](https://ai.gitee.com/apps/stringify/static-app_object-detection) +- [chatglm3-6b: Gradio + GPU](https://ai.gitee.com/apps/stringify/chatglm3-6b) +- [图像识别: Gradio](https://ai.gitee.com/apps/stringify/vit-gpt2-image-captioning) +- [jupyter-lab: Dockerfile](https://ai.gitee.com/apps/stringifygroup/jupyter-lab/) +- [livebook: Dockerfile](https://ai.gitee.com/apps/edmondfrank/livebook/tree/master) +