魔乐社区创建模型体验空间实战指南

360影视 2025-01-08 10:29 3

摘要:openMind 是一个开源的深度学习开发套件,包含 openMind Library 和 openMind Hub Client,通过简单易用的API支持模型预训练、微调、推理等流程。openMind Library通过一套接口兼容PyTorch和MindS

openMind 是一个开源的深度学习开发套件,包含 openMind Library 和 openMind Hub Client,通过简单易用的API支持模型预训练、微调、推理等流程。openMind Library通过一套接口兼容PyTorch和MindSpore等主流框架,同时原生支持昇腾NPU处理器

详情见概述|魔乐社区

需要配置 python , numpy, torch, openmind, openmind_hub 。

笔者的电脑是MAC,所以这里仅简单提供MAC配置上述环境的步骤。

安装python如果你的电脑已经安装了homebrew,打开控制台,输入一下命令即可
brew install python3
如果你的电脑还没有安装 homebrew, 可以使用官网给的命令安装
也可以使用国内镜像去安装
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"安装 numpy, torch, openmind, openmind_hub
pip install numpy
其他命令与安装numpy相同,这里不再赘述。
2.2. 模型下载(huggingface)
hugging face 这个开源平台提供了大量预训练模型,可以从中选择喜欢的模型,这里以MiniLM为例
hugging face搜索microsoft/MiniLM-L12-H384-uncased,然后在界面上找到 git 链接将仓库拷贝到本地


git clone https://huggingface.co/sentinet/suicidality
2.31. 模型上传
魔乐社区支持资源存储和共享,我们可以将本地模型上传至魔乐社区存储与共享,共同构建AI开源生态。一般为了验证模型可用性将模型 clone 到本地后我们会可以选择在本地对模型进行测试,而魔乐社区提供了模型测试,方便你下载的模型是经过测试可使用的,大大减轻了大规模模型下载到本地后的模型可用性。也可以选择将模型上传到魔乐社区以后通过魔乐社区的openmind 套件进行测试,需要注意的是,使用魔乐社区的openmind套件进行测试需要提前写好测试脚本以及配置文件,这里仅介绍后者。
下面将介绍如何将模型上传至魔乐社区,并在进行模型可用性测试。首先需要在魔乐社区创建好你的模型仓库,创建方法也非常简单,首页选择创建模型后填写好仓库名称即可。


模型可用性测试脚本必须包含以下两个文件:

requirements.txt:该脚本运行需配置的相应module (如果没有需要安装的依赖,请创建一个空的requirements.txt文件)。inference.py: 基于openMind Library的可运行的推理脚本。

且上述两个文件需要位于 examples 目录下,examples目录需要新建在根目录下。

我们新建好上述需要的测试文件后,就可以开始上传了,这里提供了一个提交脚本(仅供参考)

from openmind_hub import upload_folder
# 使用upload_folder向仓库中上传文件夹。
# token:对目标仓库具有可写权限的访问令牌,必选。
# folder_path:要上传的本地文件夹的路径,必选。
# repo_id:目标仓库,必选。
# 若需对上传的文件类型进行过滤,可以使用allow_patterns和ignore_patterns参数,详见upload_folder。

print("Starting upload_folder...")
try:
upload_folder(
token="c90ac22f50a12262da562c11234f9077af73966f",
folder_path=r"/Users/congruent/Documents/model/MiniLM-L12-H384-uncased",
repo_id="Congruent/MiniLM-L12-H384-uncased"
)
print("Upload successful.")
except Exception as e:
print(f"An error occurred: {e}")

在上传过程中,可能会出现

如图所示错误,这是由于 READMD.md 中没有指定 license 导致的,在文件中补充后再次提交即可。

详细的要求见可用性测试 | 魔乐社区

在你上传好自己的模型并通过可用性测试之后,你就可以用自己的模型搭建各种服务以及应用来便捷使用吗,魔乐社区提供了体验空间的功能来方便使用者搭建自己的服务。

这里我用MiniLM来搭建了一个简单的问答系统来做演示

在搭建问答系统之前需要先将魔乐社区自己上传的模型下载进行使用,魔乐社区提供了两种方式操作,一种是通过openmind,另一种则是通过git,在首页中找到自己上传的模型,点击下载模型。

这个界面上会给出两种方式的操作,使用openmind下载直接将对应的语句嵌入代码即可,使用git则需要将语句粘贴到终端运行。

先选择创建一个体验空间

2.在这个界面选择相应的配置,由于这里笔者的模型测试很简单,所以CPU的算力就已经足够了,有其他需求可以自行选择。环境选择了Python3.9+pytorch+openmind的搭配,这里自行选择即可。

3.创建完成后是一个空的git仓库,按照说明将仓库克隆到本地,然后在这个仓库内创建两个文件,第一个文件是 app.py ,即用于使用 gradio 进行体验空间的运行,第二个requirements.txt 则是一些配置

这里给出笔者的 miniLm 的 app.py

import gradio as gr

import torch

from openmind import AutoModel, AutoTokenizer

from sklearn.metrics.pairwise import cosine_similarity

import numpy as np

# 加载 MiniLM 模型和分词器

model_name = "Congruent/MiniLM-L12-H384-uncased"

model = AutoModel.from_pretrained(model_name)

tokenizer = AutoTokenizer.from_pretrained(model_name)

qa_pairs = [

{"question": "What is the capital of France?", "answer": "Paris"},

{"question": "Who is the CEO of Apple?", "answer": "Tim Cook"},

{"question": "How many legs does a spider have?", "answer": "Eight"}

]

def encode_question_and_answers(question, answers, tokenizer, model):

# 编码问题

inputs = tokenizer(question, return_tensors="pt", padding=True, truncation=True, max_length=512)

with torch.no_grad:

question_outputs = model(**inputs)

question_embedding = torch.mean(question_outputs.last_hidden_state, dim=1).detach.cpu.numpy # 一维数组

# 编码答案

answer_embeddings =

for answer in answers:

inputs = tokenizer(answer, return_tensors="pt", padding=True, truncation=True, max_length=512)

answer_outputs = model(**inputs)

answer_embedding = torch.mean(answer_outputs.last_hidden_state, dim=1).squeeze.detach.cpu.numpy # 确保是一维数组

answer_embeddings.append(answer_embedding)

# 直接将列表转换为 NumPy 数组,它将是一个二维数组(样本数 x 嵌入维度)

answer_embeddings_array = np.array(answer_embeddings)

return question_embedding, answer_embeddings_array

def find_best_answer(question, all_qa_pairs, tokenizer, model):

answers = [qa_pair["answer"] for qa_pair in all_qa_pairs]

question_embedding, answer_embeddings = encode_question_and_answers(question, answers, tokenizer, model)

# 计算相似度时,确保 question_embedding 是二维的

similarities = cosine_similarity(question_embedding[0].reshape(1, -1), answer_embeddings)

best_index = np.argmax(similarities)

return all_qa_pairs[best_index]["answer"]

# # 测试问答系统

# test_questions = [

# "What is the capital of France?",

# "Who leads Apple?",

#

def query(question):

return find_best_answer(question, qa_pairs, tokenizer, model)

app = gr.Interface(fn=query, inputs="text", outputs="text")

app.launch

Def query上面的部分是本身的MiniLM的模型应用部分,即将事先准备的语料用于向量化匹配,query下的 app 两行则是 gradio的使用,具体查看相关文档进行使用

而对于reqirement.txt则非常简单,终端输入

cat > requirements.txt

即可完成。

上述创建完成后,使用 git push 提交到仓库的main分支即可,tips:提交之前记得在魔乐社区创建令牌以及使用git 提交对应的文件和提交信息到本地后再push回仓库。

最后你就可以在体验空间中看到你的模型啦。

来源:DataFunTalk

相关推荐