{"id":2111,"date":"2025-09-12T10:33:00","date_gmt":"2025-09-12T10:33:00","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=2111"},"modified":"2025-09-13T18:21:13","modified_gmt":"2025-09-13T18:21:13","slug":"what-is-onnx","status":"publish","type":"post","link":"https:\/\/it.davidka.net\/it\/what-is-onnx\/","title":{"rendered":"Cos\u2019\u00e8 ONNX (Open Neural Network Exchange)?"},"content":{"rendered":"\n<p class=\"has-neve-link-color-color has-text-color has-link-color has-medium-font-size wp-elements-becbf4e3ab08934c9d18b7de3c2942e8 wp-block-paragraph\">ONNX (Open Neural Network Exchange) \u00e8 uno standard aperto creato per unificare e scambiare modelli di machine learning. Lanciato nel 2017 da Microsoft, Meta (ex Facebook) e AWS, risolve un problema chiave nel mondo dell\u2019AI: la mancanza di compatibilit\u00e0 tra diversi framework (come PyTorch e TensorFlow), strumenti e piattaforme hardware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In parole semplici, ONNX \u00e8 un \u201ctraduttore\u201d universale per le reti neurali, che permette agli sviluppatori di spostare liberamente i modelli da un ambiente all\u2019altro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Analogia:<\/strong> se una rete neurale \u00e8 un documento complesso, ONNX \u00e8 il formato PDF. Puoi creare un documento in qualsiasi editor (PyTorch, TensorFlow), ma una volta salvato come PDF si aprir\u00e0 rapidamente e in modo coerente su qualsiasi dispositivo tramite un lettore universale (ONNX Runtime).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"2111\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-1\">Come funziona ONNX<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-2\">Vantaggi principali di ONNX<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-3\">ONNX Runtime: motore di esecuzione<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-4\">Esempio pratico: da PyTorch a ONNX Runtime<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-5\">ONNX e Hugging Face: lo standard d\u2019oro per NLP<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-6\">Chiave delle prestazioni: ottimizzazione e quantizzazione<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-7\">Dove viene utilizzato ONNX<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-8\">Limitazioni<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-9\">Link utili<\/a><\/li><\/ul><\/li><\/ol><\/div><h3 id=\"rtoc-1\"  class=\"wp-block-heading\">Come funziona ONNX<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ONNX rappresenta ogni modello come un <strong>grafo computazionale<\/strong>. Questo grafo \u00e8 composto da nodi (operazioni matematiche o operatori) e archi (flussi di dati sotto forma di tensori). Lo standard definisce un insieme unificato di operatori e formati di dati compresi da tutti gli strumenti compatibili.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il processo operativo generalmente comprende due fasi principali:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Esportazione:<\/strong> un modello addestrato in un framework (ad esempio PyTorch) viene convertito in un file <code class=\"\" data-line=\"\">.onnx<\/code>.<\/li>\n\n\n\n<li><strong>Deployment (Inference):<\/strong> il file <code class=\"\" data-line=\"\">.onnx<\/code> risultante viene eseguito tramite un ambiente di runtime ad alte prestazioni \u2014 <strong>ONNX Runtime<\/strong>.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-2\"  class=\"wp-block-heading\">Vantaggi principali di ONNX<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Compatibilit\u00e0 dei framework:<\/strong><br>Il principale vantaggio \u00e8 la possibilit\u00e0 di spostare liberamente i modelli. Ad esempio, un modello pu\u00f2 essere addestrato in PyTorch, utile per la ricerca, e poi distribuito tramite ONNX Runtime, ottimizzato per l\u2019esecuzione rapida in produzione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ottimizzazione hardware:<\/strong><br>I produttori di hardware (NVIDIA, Intel, ARM) forniscono librerie ottimizzate per eseguire modelli in formato ONNX. Ci\u00f2 consente di ottenere le massime prestazioni su diversi dispositivi senza dover adattare il modello a ciascuna piattaforma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Flessibilit\u00e0 e longevit\u00e0:<\/strong><br>Lo standard non vincola lo sviluppatore a un singolo stack tecnologico. Se compare un nuovo framework pi\u00f9 efficiente, i modelli esistenti possono essere trasferiti facilmente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-3\"  class=\"wp-block-heading\">ONNX Runtime: motore di esecuzione<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ONNX Runtime<\/strong> \u00e8 un componente chiave dell\u2019ecosistema. \u00c8 un ambiente ad alte prestazioni per l\u2019esecuzione di modelli in formato <code class=\"\" data-line=\"\">.onnx<\/code>. Sviluppato da Microsoft, open source, progettato per massimizzare la velocit\u00e0 dei calcoli del grafo ONNX su qualsiasi dispositivo \u2014 dal server potente al telefono mobile. Runtime supporta molti linguaggi (Python, C++, C#, Java) e piattaforme (Windows, Linux, Android, iOS).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-4\"  class=\"wp-block-heading\">Esempio pratico: da PyTorch a ONNX Runtime<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Esportazione del modello da PyTorch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import torch\n\n# Il tuo modello addestrato\nmodel = YourSuperModel() \n# Dati di input di esempio per definire la struttura del grafo\ndummy_input = torch.randn(1, 3, 224, 224) \n\ntorch.onnx.export(model, dummy_input, &quot;model.onnx&quot;)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Esecuzione del modello con ONNX Runtime:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">import onnxruntime as ort\nimport numpy as np\n\n# Creazione della sessione di inferenza\nsession = ort.InferenceSession(&quot;model.onnx&quot;)\n\n# Preparazione dei dati di input\ninput_data = np.random.randn(1, 3, 224, 224).astype(np.float32)\ninput_name = session.get_inputs()&#091;0].name\n\n# Ottenere la predizione\nresult = session.run(None, {input_name: input_data})\nprint(result)\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-5\"  class=\"wp-block-heading\">ONNX e Hugging Face: lo standard d\u2019oro per NLP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per modelli complessi come i transformer di Hugging Face, il processo di esportazione \u00e8 semplificato dalla libreria <strong>Optimum<\/strong>, che funge da \u201cponte ufficiale\u201d e gestisce automaticamente tutti i dettagli della conversione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Installazione dei pacchetti necessari:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">pip install transformers onnx onnxruntime optimum&#091;onnxruntime]\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Esportazione ed esecuzione di un modello Hugging Face:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">from optimum.onnxruntime import ORTModelForSequenceClassification\nfrom transformers import AutoTokenizer, pipeline\n\nmodel_id = &quot;distilbert-base-uncased-finetuned-sst-2-english&quot;\n\n# Passo 1: esportazione del modello in ONNX (una tantum)\nmodel = ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)\ntokenizer = AutoTokenizer.from_pretrained(model_id)\nmodel.save_pretrained(&quot;.\/onnx-model\/&quot;)\ntokenizer.save_pretrained(&quot;.\/onnx-model\/&quot;)\n\n# Passo 2: esecuzione del modello ONNX ottimizzato\nclassifier = pipeline(&quot;text-classification&quot;, model=&quot;.\/onnx-model\/&quot;)\nresult = classifier(&quot;ONNX e Hugging Face sono una combinazione potente!&quot;)\nprint(result)  # Output: &#091;{&#039;label&#039;: &#039;POSITIVE&#039;, &#039;score&#039;: 0.9998...}]\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-6\"  class=\"wp-block-heading\">Chiave delle prestazioni: ottimizzazione e quantizzazione<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ONNX Runtime non si limita a eseguire i modelli \u2014 li accelera. Uno dei principali metodi \u00e8 la <strong>quantizzazione<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>In parole semplici:<\/strong> \u00e8 il processo di \u201csemplificazione\u201d dei calcoli all\u2019interno del modello. Invece di usare calcoli ad alta precisione (FP32, ad esempio 3.14159), il modello utilizza numeri interi leggeri e veloci a 8 bit (INT8, da -128 a 127).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vantaggi della quantizzazione:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83d\ude80 <strong>Alta velocit\u00e0:<\/strong> le operazioni su numeri interi sono molto pi\u00f9 rapide.<\/li>\n\n\n\n<li>\ud83d\udcbe <strong>Dimensioni ridotte:<\/strong> il modello diventa circa 4 volte pi\u00f9 piccolo.<\/li>\n\n\n\n<li>\ud83d\udd0b <strong>Efficienza energetica:<\/strong> riduzione del consumo energetico, critico per dispositivi mobili e edge.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-7\"  class=\"wp-block-heading\">Dove viene utilizzato ONNX<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">ONNX \u00e8 diventato uno standard industriale ed \u00e8 ampiamente adottato:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Servizi cloud:<\/strong> Azure ML, AWS SageMaker, Google Cloud AI.<\/li>\n\n\n\n<li><strong>Applicazioni desktop e mobile:<\/strong> ONNX Runtime funziona su Windows, Linux, macOS, Android e iOS.<\/li>\n\n\n\n<li><strong>Dispositivi edge:<\/strong> esecuzione efficiente dei modelli AI su dispositivi con risorse limitate (telecamere, droni, sensori industriali).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-8\"  class=\"wp-block-heading\">Limitazioni<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nonostante tutti i vantaggi, ci sono alcune limitazioni. La conversione di architetture molto complesse o nuove pu\u00f2 incontrare problemi se un operatore specifico non ha ancora un equivalente in ONNX. La comunit\u00e0 lavora attivamente per ampliare il supporto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 id=\"rtoc-9\"  class=\"wp-block-heading\">Link utili<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sito ufficiale: <a href=\"https:\/\/onnx.ai\/\">https:\/\/onnx.ai<\/a><\/li>\n\n\n\n<li>Repository GitHub: <a href=\"https:\/\/github.com\/onnx\/onnx\">https:\/\/github.com\/onnx\/onnx<\/a><\/li>\n\n\n\n<li>ONNX Runtime: <a href=\"https:\/\/onnxruntime.ai\/\">https:\/\/onnxruntime.ai<\/a><\/li>\n\n\n\n<li>Hugging Face Optimum: <a href=\"https:\/\/github.com\/huggingface\/optimum\">https:\/\/github.com\/huggingface\/optimum<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>ONNX (Open Neural Network Exchange) \u00e8 uno standard aperto creato per unificare e scambiare modelli di machine learning. Lanciato nel 2017 da Microsoft, Meta (ex Facebook) e AWS, risolve un problema chiave nel mondo dell\u2019AI: la mancanza di compatibilit\u00e0 tra diversi framework (come PyTorch e TensorFlow), strumenti e piattaforme hardware.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[540,1],"tags":[839],"class_list":["post-2111","post","type-post","status-publish","format-standard","hentry","category-llm","category-uncategorized","tag-tag-onnx"],"acf":[],"_links":{"self":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/comments?post=2111"}],"version-history":[{"count":0,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/2111\/revisions"}],"wp:attachment":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media?parent=2111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/categories?post=2111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/tags?post=2111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}