diff --git a/docs/apps/qa.md b/docs/apps/qa.md index 5be4f5ce38f0f9575a18d34ccbe3dcc1951adcd0..57056f3d217cfcef1da406ad146b418b90798980 100644 --- a/docs/apps/qa.md +++ b/docs/apps/qa.md @@ -25,7 +25,7 @@ ENTRYPOINT ["streamlit", "run", "app.py", \ ![Alt text](../../static/img/app/qa/error_log.png) -### 为什么我的应用一直在 Pengding 状态? +### 为什么我的应用一直在 Pending 状态? 可能是正在分配资源,或平台 CPU、内存资源不足,请耐心等待 diff --git a/docs/getting-started/app.md b/docs/getting-started/app.md index 016db0ce3803b22150da19acbe998d8b11ff9028..343e0d690f237dc2e146869fa4ef0f54d537563a 100644 --- a/docs/getting-started/app.md +++ b/docs/getting-started/app.md @@ -1,13 +1,13 @@ # 开发并部署 AI 应用 ## 应用引擎简介 -- Gitee Ai 的**应用引擎** 可以自由编写任何程序,您可以使用 Python、JavaScript、HTML、Go、Java、Ruby、PHP、Rust、C++ 等任何编程语言 或者 Dockerfile 来构建您的应用。 +- 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! +## Hello Gitee AI! ##### 1. 新建应用 @@ -27,13 +27,13 @@ ![gradio没有入口文件](../apps/getting-started/app-no-app-file.png) -- 您可以选择 git 克隆代码仓库到本地,编写代码后推送到 Gitee Ai 仓库,或者直接在"文件" 中在线编辑代码。本次教程使用 git 克隆。 +- 您可以选择 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 +##### 3. 创建入口文件、提交文件到 Gitee AI 在代码仓库根目录下创建 app.py 文件,写入以下代码: @@ -46,7 +46,7 @@ demo = gr.Interface(fn=greet, inputs="text", outputs="text") demo.launch(server_name='0.0.0.0', server_port=7860) ``` -提交并推送代码到 Gitee Ai 仓库 +提交并推送代码到 Gitee AI 仓库 ```git git add app.py git commit -m "创建 app.py 文件" @@ -87,86 +87,87 @@ git push ## 中文古诗生成器 -前面只是小试牛刀,现在尝试真正的 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) - -至此,您已经成功构建了一个中文古诗生成器应用!您还可以进入应用设置中升级硬件配置、调整应用信息、添加环境变量、秘钥等。 - -### 更多应用示例 +前面只是小试牛刀,现在尝试真正的 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)