ONNX Runtime (ort)
Execute modelos ONNX exportados em Rust com o ONNX Runtime - o caminho padrão do treinamento em Python para inferência nativa.
Busque em todas as páginas da documentação
Execute modelos ONNX exportados em Rust com o ONNX Runtime - o caminho padrão do treinamento em Python para inferência nativa.
use ndarray::Array;
use ort::{inputs, session::Session, value::Tensor};
fn predict(session: &Session, flat: Vec<f32>) -> ort::Result<f32> {
let input = Array::from_shape_vec((1, flat.len()), flat)?;
let outputs = session.run(inputs![Tensor::from_array(input)?])?;
let view = outputs[0].try_extract_tensor::<f32>()?;
Ok(view[0])
}Quando usar isso:
use ndarray::Array;
use ort::{inputs, session::Session, value::Tensor};
fn main() -> ort::Result<()> {
let session = Session::builder()?.commit_from_file("model.onnx")?;
let features = vec![0.1f32, 0.2, 0.3, 0.4];
let input = Array::from_shape_vec((1, 4), features)?;
let outputs = session.run(inputs![Tensor::from_array(input)?])?;
let tensor = outputs[0].try_extract_tensor::<f32>()?;
println!("score: {}", tensor[0]);
Ok(())
}O que isso demonstra:
Session::run mapeia tensores Rust para memória ORT, executa provedores e retorna saídas.| Etapa | Ação |
|---|---|
| Treinar | PyTorch/sklearn/etc. |
| Exportar | torch.onnx.export ou ferramenta do framework |
| Validar | onnx.checker + inferência de amostra em Rust |
input_ids e não input. Correção: imprima session.inputs e combine as strings.Arc<Session> no início do processo.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| candle | Transformer nativo em Rust sem ONNX | O modelo só existe como ONNX hoje |
| burn import | Permanecer no ecossistema burn | O grafo usa operações ONNX não suportadas |
| Microserviço Python | Iteração rápida | Latência/custo de operação do sidecar |
| TensorRT diretamente | Desempenho máximo apenas NVIDIA | Necessidade de fallback de CPU portátil |
Compile ort com recursos CUDA e registre o provedor de execução CUDA em Session::builder() - o driver deve existir no contêiner.
Sim - uma Session por modelo, compartilhe entre threads com Arc se a documentação de segurança de threads do ORT permitir para seu EP.
Defina a dimensão do lote na forma do tensor de entrada em tempo de execução se a exportação usou anotações de eixo dinâmico.
A maioria dos classificadores ONNX esperam tensores numéricos - tokeniza o texto antes do ORT, não dentro das APIs genéricas do ORT.
Flags de perfil do ORT, grafo menor via onnx-simplifier e provedor de GPU quando o tamanho do lote justificar.
Corresponda ao opset suportado pelo ort; reexporte do framework de treinamento se a importação falhar.
Empilhe linhas na dimensão do lote quando o grafo suportar lote dinâmico; preencha até o comprimento máximo para sequências.
Trate ONNX como código - verifique checksums e assine artefatos no armazenamento de objetos.
Verifique em um pequeno fixture ONNX e afirme o tensor de saída dentro de um epsilon da referência Python.
Veja Servindo Modelos com Axum para a conexão HTTP.
Versões da Pilha: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026