ONNX версия модели
Привет, будут ли выпущены ONNX версии модели? например O3, O4?
Да это возможно, возьмем в проработку. Спасибо,что пользуетесь нашим решением.
А GGUF не планируете сделать ? при попытке прогнать через gguf-my-repo ругается на отсутствие токенайзера:
INFO:hf-to-gguf:Set model tokenizer
Traceback (most recent call last):
File "/home/user/app/./llama.cpp/convert_hf_to_gguf.py", line 5140, in
main()
File "/home/user/app/./llama.cpp/convert_hf_to_gguf.py", line 5134, in main
model_instance.write()
File "/home/user/app/./llama.cpp/convert_hf_to_gguf.py", line 440, in write
self.prepare_metadata(vocab_only=False)
File "/home/user/app/./llama.cpp/convert_hf_to_gguf.py", line 433, in prepare_metadata
self.set_vocab()
File "/home/user/app/./llama.cpp/convert_hf_to_gguf.py", line 4316, in set_vocab
raise FileNotFoundError(f"File not found: {tokenizer_path}")
FileNotFoundError: File not found: downloads/tmpbc6nm1xl/FRIDA/spiece.model
поддерживаю насчёт gguf
ни конвертнуть, ни в ollama не запустить
@hiauiarau , @ai-forever , модель, в целом, и так конвертируется в onnx.
- Конвертация:
import torch
from transformers import T5EncoderModel, AutoTokenizer
from pathlib import Path
MODEL_SOURCE_PATH = "ai-forever_frida" # Директория, в которой содержится модель
MODEL_TARGET_PATH = Path("ai-forever_frida-onnx")
if not MODEL_TARGET_PATH.exists():
MODEL_TARGET_PATH.mkdir()
tokenizer = AutoTokenizer.from_pretrained(MODEL_SOURCE_PATH)
model = T5EncoderModel.from_pretrained(MODEL_SOURCE_PATH)
model.eval()
dummy_input = tokenizer(
"Инпут для конвертации", max_length=512, padding=True, truncation=True, return_tensors="pt"
)["input_ids"]
torch.onnx.export(
model,
dummy_input,
(MODEL_TARGET_PATH / "t5_encoder.onnx").as_posix(),
input_names=["input_ids"],
output_names=["hidden_states"],
dynamic_axes={
"input_ids": {0: "batch_size", 1: "sequence_length"},
"hidden_states": {0: "batch_size", 1: "sequence_length"},
}
)
tokenizer.save_pretrained(MODEL_TARGET_PATH)
- Инференс:
import numpy as np
import onnxruntime as ort
from transformers import AutoTokenizer
from pathlib import Path
MODEL_PATH = Path("ai-forever_frida-onnx/t5_encoder.onnx")
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH.parent.as_posix())
model = ort.InferenceSession(MODEL_PATH)
my_input = tokenizer(
"search_query: Проверяем, работает ли onnx.", max_length=512, padding=True, truncation=True, return_tensors="np"
)["input_ids"]
outputs = model.run(None, {"input_ids": my_input})[0][:, 0][0]
embeddings = outputs / np.linalg.norm(outputs)
print(embeddings)
Косинусое расстояние между полученными векторами на 130 семплах (Клиент SentenceTransformers и ONNX) в среднем 0.99624.
Главное учитывать передачу в энкодер prompt_name.