Buckets:
| import{s as $n,o as Un,n as W}from"../chunks/scheduler.36a0863c.js";import{S as Cn,i as vn,g as r,s,r as c,A as xn,h as p,f as l,c as n,j as hn,u as m,x as d,k as wn,y as Zn,a,v as u,d as M,t as f,w as y}from"../chunks/index.f891bdb2.js";import{T as Rt}from"../chunks/Tip.a8272f7f.js";import{C as T}from"../chunks/CodeBlock.3ec784ea.js";import{F as Bn,M as Jn}from"../chunks/Markdown.7b58822e.js";import{H as $,E as In}from"../chunks/EditOnGithub.a58e27a9.js";function kn(w){let o,b,i,g=`Una vez que se guarda el checkpoint, podemos exportarlo a ONNX usando el argumento <code>--model</code> | |
| del paquete <code>transformers.onnx</code> al directorio deseado:`,h,J,U;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBJTIzJTIwTG9hZCUyMHRva2VuaXplciUyMGFuZCUyMFB5VG9yY2glMjB3ZWlnaHRzJTIwZm9ybSUyMHRoZSUyMEh1YiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQlMkZkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEFwdF9tb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQlMkZkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEElMjMlMjBTYXZlJTIwdG8lMjBkaXNrJTBBdG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZCglMjJsb2NhbC1wdC1jaGVja3BvaW50JTIyKSUwQXB0X21vZGVsLnNhdmVfcHJldHJhaW5lZCglMjJsb2NhbC1wdC1jaGVja3BvaW50JTIyKQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification | |
| <span class="hljs-meta">>>> </span><span class="hljs-comment"># Load tokenizer and PyTorch weights form the Hub</span> | |
| <span class="hljs-meta">>>> </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span>pt_model = AutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span><span class="hljs-comment"># Save to disk</span> | |
| <span class="hljs-meta">>>> </span>tokenizer.save_pretrained(<span class="hljs-string">"local-pt-checkpoint"</span>) | |
| <span class="hljs-meta">>>> </span>pt_model.save_pretrained(<span class="hljs-string">"local-pt-checkpoint"</span>)`,wrap:!1}}),J=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC1wdC1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-pt-checkpoint onnx/",wrap:!1}}),{c(){c(o.$$.fragment),b=s(),i=r("p"),i.innerHTML=g,h=s(),c(J.$$.fragment)},l(j){m(o.$$.fragment,j),b=n(j),i=p(j,"P",{"data-svelte-h":!0}),d(i)!=="svelte-c1bn59"&&(i.innerHTML=g),h=n(j),m(J.$$.fragment,j)},m(j,C){u(o,j,C),a(j,b,C),a(j,i,C),a(j,h,C),u(J,j,C),U=!0},p:W,i(j){U||(M(o.$$.fragment,j),M(J.$$.fragment,j),U=!0)},o(j){f(o.$$.fragment,j),f(J.$$.fragment,j),U=!1},d(j){j&&(l(b),l(i),l(h)),y(o,j),y(J,j)}}}function _n(w){let o,b;return o=new Jn({props:{$$slots:{default:[kn]},$$scope:{ctx:w}}}),{c(){c(o.$$.fragment)},l(i){m(o.$$.fragment,i)},m(i,g){u(o,i,g),b=!0},p(i,g){const h={};g&2&&(h.$$scope={dirty:g,ctx:i}),o.$set(h)},i(i){b||(M(o.$$.fragment,i),b=!0)},o(i){f(o.$$.fragment,i),b=!1},d(i){y(o,i)}}}function Wn(w){let o,b,i,g=`Una vez que se guarda el checkpoint, podemos exportarlo a ONNX usando el argumento <code>--model</code> | |
| del paquete <code>transformers.onnx</code> al directorio deseado:`,h,J,U;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEElMjMlMjBMb2FkJTIwdG9rZW5pemVyJTIwYW5kJTIwVGVuc29yRmxvdyUyMHdlaWdodHMlMjBmcm9tJTIwdGhlJTIwSHViJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydCUyRmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKSUwQXRmX21vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBJTIzJTIwU2F2ZSUyMHRvJTIwZGlzayUwQXRva2VuaXplci5zYXZlX3ByZXRyYWluZWQoJTIybG9jYWwtdGYtY2hlY2twb2ludCUyMiklMEF0Zl9tb2RlbC5zYXZlX3ByZXRyYWluZWQoJTIybG9jYWwtdGYtY2hlY2twb2ludCUyMik=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification | |
| <span class="hljs-meta">>>> </span><span class="hljs-comment"># Load tokenizer and TensorFlow weights from the Hub</span> | |
| <span class="hljs-meta">>>> </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span>tf_model = TFAutoModelForSequenceClassification.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span><span class="hljs-comment"># Save to disk</span> | |
| <span class="hljs-meta">>>> </span>tokenizer.save_pretrained(<span class="hljs-string">"local-tf-checkpoint"</span>) | |
| <span class="hljs-meta">>>> </span>tf_model.save_pretrained(<span class="hljs-string">"local-tf-checkpoint"</span>)`,wrap:!1}}),J=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0Rsb2NhbC10Zi1jaGVja3BvaW50JTIwb25ueCUyRg==",highlighted:"python -m transformers.onnx --model=local-tf-checkpoint onnx/",wrap:!1}}),{c(){c(o.$$.fragment),b=s(),i=r("p"),i.innerHTML=g,h=s(),c(J.$$.fragment)},l(j){m(o.$$.fragment,j),b=n(j),i=p(j,"P",{"data-svelte-h":!0}),d(i)!=="svelte-c1bn59"&&(i.innerHTML=g),h=n(j),m(J.$$.fragment,j)},m(j,C){u(o,j,C),a(j,b,C),a(j,i,C),a(j,h,C),u(J,j,C),U=!0},p:W,i(j){U||(M(o.$$.fragment,j),M(J.$$.fragment,j),U=!0)},o(j){f(o.$$.fragment,j),f(J.$$.fragment,j),U=!1},d(j){j&&(l(b),l(i),l(h)),y(o,j),y(J,j)}}}function Xn(w){let o,b;return o=new Jn({props:{$$slots:{default:[Wn]},$$scope:{ctx:w}}}),{c(){c(o.$$.fragment)},l(i){m(o.$$.fragment,i)},m(i,g){u(o,i,g),b=!0},p(i,g){const h={};g&2&&(h.$$scope={dirty:g,ctx:i}),o.$set(h)},i(i){b||(M(o.$$.fragment,i),b=!0)},o(i){f(o.$$.fragment,i),b=!1},d(i){y(o,i)}}}function Nn(w){let o,b=`Las características que tienen un sufijo ‘with-past’ (por ejemplo, ‘causal-lm-with-past’) corresponden a topologías | |
| de modelo con estados ocultos precalculados (clave y valores en los bloques de atención) que se pueden usar para una | |
| decodificación autorregresiva más rápida.`;return{c(){o=r("p"),o.textContent=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-1d2ttlc"&&(o.textContent=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function An(w){let o,b=`Una buena manera de implementar una configuración personalizada en ONNX es observar la implementación | |
| existente en el archivo <code>configuration_<model_name>.py</code> de una arquitectura similar.`;return{c(){o=r("p"),o.innerHTML=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-1nire10"&&(o.innerHTML=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function Gn(w){let o,b=`Observa que la propiedad <code>inputs</code> para <code>DistilBertOnnxConfig</code> devuelve un <code>OrderedDict</code>. | |
| Esto nos asegura que las entradas coincidan con su posición relativa dentro del método | |
| <code>PreTrainedModel.forward()</code> al rastrear el grafo. Recomendamos usar un <code>OrderedDict</code> | |
| para las propiedades <code>inputs</code> y <code>outputs</code> al implementar configuraciones ONNX personalizadas.`;return{c(){o=r("p"),o.innerHTML=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-1tas9p7"&&(o.innerHTML=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function Rn(w){let o,b=`Todas las propiedades base y métodos asociados con <code>OnnxConfig</code> y las | |
| otras clases de configuración se pueden sobreescribir si es necesario. | |
| Consulte <code>BartOnnxConfig</code> para ver un ejemplo avanzado.`;return{c(){o=r("p"),o.innerHTML=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-ggia3t"&&(o.innerHTML=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function En(w){let o,b=`Si tu modelo tiene más de 2GB, verás que se crean muchos archivos adicionales durante la exportación. | |
| Esto es <em>esperado</em> porque ONNX usa <a href="https://developers.google.com/protocol-buffers/" rel="nofollow">Búferes de protocolo</a> | |
| para almacenar el modelo y éstos tienen un límite de tamaño de 2 GB. Consulta la | |
| <a href="https://github.com/onnx/onnx/blob/master/docs/ExternalData.md" rel="nofollow">documentación de ONNX</a> para obtener | |
| instrucciones sobre cómo cargar modelos con datos externos.`;return{c(){o=r("p"),o.innerHTML=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-1ms6fox"&&(o.innerHTML=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function Vn(w){let o,b=`Este es el comienzo de nuestros experimentos con TorchScript y todavía estamos explorando sus capacidades con modelos de | |
| tamaño de entrada variable. Es un tema de interés y profundizaremos nuestro análisis en las próximas | |
| versiones, con más ejemplos de código, una implementación más flexible y puntos de referencia que comparen códigos | |
| basados en Python con TorchScript compilado.`;return{c(){o=r("p"),o.textContent=b},l(i){o=p(i,"P",{"data-svelte-h":!0}),d(o)!=="svelte-1u0h9mk"&&(o.textContent=b)},m(i,g){a(i,o,g)},p:W,d(i){i&&l(o)}}}function Hn(w){let o,b,i,g,h,J,U,j=`Si necesitas implementar modelos 🤗 Transformers en entornos de producción, te | |
| recomendamos exportarlos a un formato serializado que se pueda cargar y ejecutar | |
| en tiempos de ejecución y hardware especializados. En esta guía, te mostraremos cómo | |
| exportar modelos 🤗 Transformers en dos formatos ampliamente utilizados: ONNX y TorchScript.`,C,X,Ka=`Una vez exportado, un modelo puede optimizarse para la inferencia a través de técnicas | |
| como la cuantización y <em>pruning</em>. Si estás interesado en optimizar tus modelos para | |
| que funcionen con la máxima eficiencia, consulta la | |
| <a href="https://github.com/huggingface/optimum" rel="nofollow">biblioteca de 🤗 Optimum</a>.`,Vt,N,Ht,A,es=`El proyecto <a href="http://onnx.ai" rel="nofollow">ONNX (Open Neural Network eXchange)</a> es un | |
| estándar abierto que define un conjunto común de operadores y un formato | |
| de archivo común para representar modelos de aprendizaje profundo en una | |
| amplia variedad de <em>frameworks</em>, incluidos PyTorch y TensorFlow. Cuando un modelo | |
| se exporta al formato ONNX, estos operadores se usan para construir un | |
| grafo computacional (a menudo llamado <em>representación intermedia</em>) que | |
| representa el flujo de datos a través de la red neuronal.`,qt,G,ts=`Al exponer un grafo con operadores y tipos de datos estandarizados, ONNX facilita | |
| el cambio entre frameworks. Por ejemplo, un modelo entrenado en PyTorch se puede | |
| exportar a formato ONNX y luego importar en TensorFlow (y viceversa).`,zt,R,ls=`🤗 Transformers proporciona un paquete llamado <code>transformers.onnx</code>, el cual permite convertir | |
| los checkpoints de un modelo en un grafo ONNX aprovechando los objetos de configuración. | |
| Estos objetos de configuración están hechos a la medida de diferentes arquitecturas de modelos | |
| y están diseñados para ser fácilmente extensibles a otras arquitecturas.`,Lt,E,as="Las configuraciones a la medida incluyen las siguientes arquitecturas:",Qt,V,ss="<li>ALBERT</li> <li>BART</li> <li>BEiT</li> <li>BERT</li> <li>BigBird</li> <li>BigBird-Pegasus</li> <li>Blenderbot</li> <li>BlenderbotSmall</li> <li>BLOOM</li> <li>CamemBERT</li> <li>CLIP</li> <li>CodeGen</li> <li>ConvBERT</li> <li>ConvNeXT</li> <li>ConvNeXTV2</li> <li>Data2VecText</li> <li>Data2VecVision</li> <li>DeBERTa</li> <li>DeBERTa-v2</li> <li>DeiT</li> <li>DETR</li> <li>DistilBERT</li> <li>ELECTRA</li> <li>FlauBERT</li> <li>GPT Neo</li> <li>GPT-J</li> <li>I-BERT</li> <li>LayoutLM</li> <li>LayoutLMv3</li> <li>LeViT</li> <li>LongT5</li> <li>M2M100</li> <li>Marian</li> <li>mBART</li> <li>MobileBERT</li> <li>MobileViT</li> <li>MT5</li> <li>OpenAI GPT-2</li> <li>Perceiver</li> <li>PLBart</li> <li>ResNet</li> <li>RoBERTa</li> <li>RoFormer</li> <li>SqueezeBERT</li> <li>T5</li> <li>ViT</li> <li>XLM</li> <li>XLM-RoBERTa</li> <li>XLM-RoBERTa-XL</li> <li>YOLOS</li>",St,H,ns="En las próximas dos secciones, te mostraremos cómo:",Ft,q,os="<li>Exportar un modelo compatible utilizando el paquete <code>transformers.onnx</code>.</li> <li>Exportar un modelo personalizado para una arquitectura no compatible.</li>",Yt,z,Pt,L,is=`Para exportar un modelo 🤗 Transformers a ONNX, tienes que instalar primero algunas | |
| dependencias extra:`,Ot,Q,Dt,S,rs="El paquete <code>transformers.onnx</code> puede ser usado luego como un módulo de Python:",Kt,F,el,Y,ps="Exportar un checkpoint usando una configuración a la medida se puede hacer de la siguiente manera:",tl,P,ll,O,ds="que debería mostrar los siguientes registros:",al,D,sl,K,cs=`Esto exporta un grafo ONNX del checkpoint definido por el argumento <code>--model</code>. | |
| En este ejemplo, es un modelo <code>distilbert/distilbert-base-uncased</code>, pero puede ser cualquier | |
| checkpoint en Hugging Face Hub o que esté almacenado localmente.`,nl,ee,ms=`El archivo <code>model.onnx</code> resultante se puede ejecutar en uno de los | |
| <a href="https://onnx.ai/supported-tools.html#deployModel" rel="nofollow">muchos aceleradores</a> | |
| que admiten el estándar ONNX. Por ejemplo, podemos cargar y ejecutar el | |
| modelo con <a href="https://onnxruntime.ai/" rel="nofollow">ONNX Runtime</a> de la siguiente manera:`,ol,te,il,le,us=`Los nombres necesarios de salida (es decir, <code>["last_hidden_state"]</code>) se pueden obtener | |
| echando un vistazo a la configuración ONNX de cada modelo. Por ejemplo, para DistilBERT tenemos:`,rl,ae,pl,se,Ms=`El proceso es idéntico para los checkpoints de TensorFlow en Hub. | |
| Por ejemplo, podemos exportar un checkpoint puro de TensorFlow desde | |
| <a href="https://huggingface.co/keras-io" rel="nofollow">Keras</a> de la siguiente manera:`,dl,ne,cl,oe,fs=`Para exportar un modelo que está almacenado localmente, deberás tener los pesos | |
| y tokenizadores del modelo almacenados en un directorio. Por ejemplo, podemos cargar | |
| y guardar un checkpoint de la siguiente manera:`,ml,v,ul,ie,Ml,re,ys=`Cada configuración a la medida viene con un conjunto de <em>características</em> que te permiten exportar | |
| modelos para diferentes tipos de topologías o tareas. Como se muestra en la siguiente tabla, cada | |
| función está asociada con una auto-clase de automóvil diferente:`,fl,pe,js="<thead><tr><th>Feature</th> <th>Auto Class</th></tr></thead> <tbody><tr><td><code>causal-lm</code>, <code>causal-lm-with-past</code></td> <td><code>AutoModelForCausalLM</code></td></tr> <tr><td><code>default</code>, <code>default-with-past</code></td> <td><code>AutoModel</code></td></tr> <tr><td><code>masked-lm</code></td> <td><code>AutoModelForMaskedLM</code></td></tr> <tr><td><code>question-answering</code></td> <td><code>AutoModelForQuestionAnswering</code></td></tr> <tr><td><code>seq2seq-lm</code>, <code>seq2seq-lm-with-past</code></td> <td><code>AutoModelForSeq2SeqLM</code></td></tr> <tr><td><code>sequence-classification</code></td> <td><code>AutoModelForSequenceClassification</code></td></tr> <tr><td><code>token-classification</code></td> <td><code>AutoModelForTokenClassification</code></td></tr></tbody>",yl,de,bs=`Para cada configuración, puedes encontrar la lista de funciones admitidas a través de <code>FeaturesManager</code>. | |
| Por ejemplo, para DistilBERT tenemos:`,jl,ce,bl,me,gs=`Le puedes pasar una de estas características al argumento <code>--feature</code> en el paquete <code>transformers.onnx</code>. | |
| Por ejemplo, para exportar un modelo de clasificación de texto, podemos elegir un modelo ya ajustado del Hub y ejecutar:`,gl,ue,Tl,Me,Ts="que mostrará los siguientes registros:",hl,fe,wl,ye,hs=`Ten en cuenta que, en este caso, los nombres de salida del modelo ajustado son <code>logits</code> en lugar de <code>last_hidden_state</code> | |
| que vimos anteriormente con el checkpoint <code>distilbert/distilbert-base-uncased</code>. Esto es de esperarse ya que el modelo ajustado | |
| tiene un cabezal de clasificación secuencial.`,Jl,x,$l,je,Ul,be,ws=`Si deseas exportar un modelo cuya arquitectura no es compatible de forma nativa | |
| con la biblioteca, debes seguir tres pasos principales:`,Cl,ge,Js="<li>Implementa una configuración personalizada en ONNX.</li> <li>Exporta el modelo a ONNX.</li> <li>Valide los resultados de PyTorch y los modelos exportados.</li>",vl,Te,$s=`En esta sección, veremos cómo se implementó la serialización de DistilBERT | |
| para mostrar lo que implica cada paso.`,xl,he,Zl,we,Us=`Comencemos con el objeto de configuración de ONNX. Proporcionamos tres clases abstractas | |
| de las que debe heredar, según el tipo de arquitectura del modelo que quieras exportar:`,Bl,Je,Cs="<li>Modelos basados en el <em>Encoder</em> inherente de <code>OnnxConfig</code></li> <li>Modelos basados en el <em>Decoder</em> inherente de <code>OnnxConfigWithPast</code></li> <li>Modelos <em>Encoder-decoder</em> inherente de <code>OnnxSeq2SeqConfigWithPast</code></li>",Il,Z,kl,$e,vs="Dado que DistilBERT es un modelo de tipo <em>encoder</em>, su configuración se hereda de <code>OnnxConfig</code>:",_l,Ue,Wl,Ce,xs=`Cada objeto de configuración debe implementar la propiedad <code>inputs</code> y devolver un mapeo, | |
| donde cada llave corresponde a una entrada esperada y cada valor indica el eje de esa entrada. | |
| Para DistilBERT, podemos ver que se requieren dos entradas: <code>input_ids</code> y <code>attention_mask</code>. | |
| Estas entradas tienen la misma forma de <code>(batch_size, sequence_length)</code>, es por lo que vemos | |
| los mismos ejes utilizados en la configuración.`,Xl,B,Nl,ve,Zs=`Una vez que hayas implementado una configuración ONNX, puedes crear una | |
| instancia proporcionando la configuración del modelo base de la siguiente manera:`,Al,xe,Gl,Ze,Bs=`El objeto resultante tiene varias propiedades útiles. Por ejemplo, puedes ver el conjunto de operadores ONNX que se | |
| utilizará durante la exportación:`,Rl,Be,El,Ie,Is="También puedes ver los resultados asociados con el modelo de la siguiente manera:",Vl,ke,Hl,_e,ks=`Observa que la propiedad de salidas sigue la misma estructura que las entradas; | |
| devuelve un objecto <code>OrderedDict</code> de salidas nombradas y sus formas. La estructura | |
| de salida está vinculada a la elección de la función con la que se inicializa la configuración. | |
| Por defecto, la configuración de ONNX se inicializa con la función <code>default</code> que | |
| corresponde a exportar un modelo cargado con la clase <code>AutoModel</code>. Si quieres exportar | |
| una topología de modelo diferente, simplemente proporciona una característica diferente | |
| al argumento <code>task</code> cuando inicialices la configuración de ONNX. Por ejemplo, si quisiéramos | |
| exportar DistilBERT con un cabezal de clasificación de secuencias, podríamos usar:`,ql,We,zl,I,Ll,Xe,Ql,Ne,_s=`Una vez que hayas implementado la configuración de ONNX, el siguiente paso es exportar el modelo. | |
| Aquí podemos usar la función <code>export()</code> proporcionada por el paquete <code>transformers.onnx</code>. | |
| Esta función espera la configuración de ONNX, junto con el modelo base y el tokenizador, | |
| y la ruta para guardar el archivo exportado:`,Sl,Ae,Fl,Ge,Ws=`Los objetos <code>onnx_inputs</code> y <code>onnx_outputs</code> devueltos por la función <code>export()</code> | |
| son listas de llaves definidas en las propiedades <code>inputs</code> y <code>outputs</code> de la configuración. | |
| Una vez exportado el modelo, puedes probar que el modelo está bien formado de la siguiente manera:`,Yl,Re,Pl,k,Ol,Ee,Dl,Ve,Xs=`El paso final es validar que los resultados del modelo base y exportado coincidan dentro | |
| de cierta tolerancia absoluta. Aquí podemos usar la función <code>validate_model_outputs()</code> | |
| proporcionada por el paquete <code>transformers.onnx</code> de la siguiente manera:`,Kl,He,ea,qe,Ns=`Esta función usa el método <code>OnnxConfig.generate_dummy_inputs()</code> para generar entradas para el modelo base | |
| y exportado, y la tolerancia absoluta se puede definir en la configuración. En general, encontramos una | |
| concordancia numérica en el rango de 1e-6 a 1e-4, aunque es probable que cualquier valor menor que 1e-3 esté bien.`,ta,ze,la,Le,As=`¡Estamos buscando expandir el conjunto de configuraciones a la medida para usar y agradecemos las contribuciones de la comunidad! | |
| Si deseas contribuir con su colaboración a la biblioteca, deberás:`,aa,Qe,Gs="<li>Implementa la configuración de ONNX en el archivo <code>configuration_<model_name>.py</code> correspondiente</li> <li>Incluye la arquitectura del modelo y las características correspondientes en <code>~onnx.features.FeatureManager</code></li> <li>Agrega tu arquitectura de modelo a las pruebas en <code>test_onnx_v2.py</code></li>",sa,Se,Rs=`Revisa cómo fue la contribución para la <a href="https://github.com/huggingface/transformers/pull/14868/files" rel="nofollow">configuración de IBERT</a> | |
| y así tener una idea de lo que necesito.`,na,Fe,oa,_,ia,Ye,Es=`Según la documentación de PyTorch: “TorchScript es una forma de crear modelos serializables y optimizables a partir del | |
| código de PyTorch”. Los dos módulos de Pytorch <a href="https://pytorch.org/docs/stable/jit.html" rel="nofollow">JIT y TRACE</a> permiten al | |
| desarrollador exportar su modelo para reutilizarlo en otros programas, como los programas C++ orientados a la eficiencia.`,ra,Pe,Vs=`Hemos proporcionado una interfaz que permite exportar modelos de 🤗 Transformers a TorchScript para que puedan reutilizarse | |
| en un entorno diferente al de un programa Python basado en PyTorch. Aquí explicamos cómo exportar y usar nuestros modelos | |
| usando TorchScript.`,pa,Oe,Hs="Exportar un modelo requiere de dos cosas:",da,De,qs="<li>un pase hacia adelante con entradas ficticias.</li> <li>instanciación del modelo con la indicador <code>torchscript</code>.</li>",ca,Ke,zs="Estas necesidades implican varias cosas con las que los desarrolladores deben tener cuidado. Éstas se detallan a continuación.",ma,et,ua,tt,Ls=`Este indicador es necesario porque la mayoría de los modelos de lenguaje en este repositorio tienen pesos vinculados entre su capa | |
| de <code>Embedding</code> y su capa de <code>Decoding</code>. TorchScript no permite la exportación de modelos que tengan pesos atados, por lo que es | |
| necesario desvincular y clonar los pesos previamente.`,Ma,lt,Qs=`Esto implica que los modelos instanciados con el indicador <code>torchscript</code> tienen su capa <code>Embedding</code> y <code>Decoding</code> separadas, | |
| lo que significa que no deben entrenarse más adelante. El entrenamiento desincronizaría las dos capas, lo que generaría | |
| resultados inesperados.`,fa,at,Ss=`Este no es el caso de los modelos que no tienen un cabezal de modelo de lenguaje, ya que no tienen pesos atados. | |
| Estos modelos se pueden exportar de forma segura sin el indicador <code>torchscript</code>.`,ya,st,ja,nt,Fs=`Las entradas ficticias se utilizan para crear un modelo de pase hacia adelante. Mientras los valores de las entradas se | |
| propagan a través de las capas, PyTorch realiza un seguimiento de las diferentes operaciones ejecutadas en cada tensor. | |
| Estas operaciones registradas se utilizan luego para crear el “rastro” del modelo.`,ba,ot,Ys=`El rastro se crea en relación con las dimensiones de las entradas. Por lo tanto, está limitado por las dimensiones de la | |
| entrada ficticia y no funcionará para ninguna otra longitud de secuencia o tamaño de lote. Al intentar con un tamaño diferente, | |
| un error como:`,ga,it,Ps="<code>The expanded size of the tensor (3) must match the existing size (7) at non-singleton dimension 2</code>",Ta,rt,Os=`aparecerá. Por lo tanto, se recomienda rastrear el modelo con un tamaño de entrada ficticia al menos tan grande como la | |
| entrada más grande que se alimentará al modelo durante la inferencia. El <em>padding</em> se puede realizar para completar los | |
| valores que faltan. Sin embargo, como el modelo se habrá rastreado con un tamaño de entrada grande, las dimensiones de | |
| las diferentes matrices también serán grandes, lo que dará como resultado más cálculos.`,ha,pt,Ds=`Se recomienda tener cuidado con el número total de operaciones realizadas en cada entrada y seguir de cerca el rendimiento | |
| al exportar modelos de longitud de secuencia variable.`,wa,dt,Ja,ct,Ks="A continuación se muestra un ejemplo que muestra cómo guardar, cargar modelos y cómo usar el rastreo para la inferencia.",$a,mt,Ua,ut,en=`Este fragmento muestra cómo usar TorchScript para exportar un <code>BertModel</code>. Aquí, el <code>BertModel</code> se instancia de acuerdo | |
| con la clase <code>BertConfig</code> y luego se guarda en el disco con el nombre de archivo <code>traced_bert.pt</code>`,Ca,Mt,va,ft,xa,yt,tn=`Este fragmento muestra cómo cargar el <code>BertModel</code> que se guardó previamente en el disco con el nombre <code>traced_bert.pt</code>. | |
| Estamos reutilizando el <code>dummy_input</code> previamente inicializado.`,Za,jt,Ba,bt,Ia,gt,ln="Usar el modelo rastreado para la inferencia es tan simple como usar su método <code>__call__</code>:",ka,Tt,_a,ht,Wa,wt,an=`AWS presentó la familia de instancias <a href="https://aws.amazon.com/ec2/instance-types/inf1/" rel="nofollow">Amazon EC2 Inf1</a> para la inferencia | |
| de aprendizaje automático de bajo costo y alto rendimiento en la nube. Las instancias Inf1 funcionan con el chip AWS | |
| Inferentia, un acelerador de hardware personalizado, que se especializa en cargas de trabajo de inferencia de aprendizaje | |
| profundo. <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/#" rel="nofollow">AWS Neuron</a> es el kit de desarrollo para Inferentia | |
| que admite el rastreo y la optimización de modelos de transformers para su implementación en Inf1. El SDK de Neuron proporciona:`,Xa,Jt,sn=`<li>API fácil de usar con una línea de cambio de código para rastrear y optimizar un modelo de TorchScript para la inferencia en la nube.</li> <li>Optimizaciones de rendimiento listas para usar con un <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/benchmark/%3E" rel="nofollow">costo-rendimiento mejorado</a></li> <li>Soporte para modelos HuggingFace Transformers construidos con <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/bert_tutorial/tutorial_pretrained_bert.html" rel="nofollow">PyTorch</a> | |
| o <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/tensorflow/huggingface_bert/huggingface_bert.html" rel="nofollow">TensorFlow</a>.</li>`,Na,$t,Aa,Ut,nn=`Los modelos Transformers basados en la arquitectura | |
| <a href="https://huggingface.co/docs/transformers/main/model_doc/bert" rel="nofollow">BERT (Representaciones de <em>Enconder</em> bidireccional de Transformers)</a>, | |
| o sus variantes, como <a href="https://huggingface.co/docs/transformers/main/model_doc/distilbert" rel="nofollow">distilBERT</a> y | |
| <a href="https://huggingface.co/docs/transformers/main/model_doc/roberta" rel="nofollow">roBERTa</a>, se ejecutarán mejor en Inf1 para tareas no | |
| generativas, como la respuesta extractiva de preguntas, la clasificación de secuencias y la clasificación de tokens. | |
| Como alternativa, las tareas de generación de texto se pueden adaptar para ejecutarse en Inf1, según este | |
| <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/src/examples/pytorch/transformers-marianmt.html" rel="nofollow">tutorial de AWS Neuron MarianMT</a>. | |
| Puedes encontrar más información sobre los modelos que están listos para usarse en Inferentia en la | |
| <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/models/models-inferentia.html#models-inferentia" rel="nofollow">sección <em>Model Architecture Fit</em> de la documentación de Neuron</a>.`,Ga,Ct,Ra,vt,on="Usar AWS Neuron para convertir modelos requiere las siguientes dependencias y entornos:",Ea,xt,rn=`<li>Un <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/pytorch-neuron/index.html#installation-guide" rel="nofollow">entorno Neuron SDK</a>, | |
| que viene preconfigurado en <a href="https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-inferentia-launching.html" rel="nofollow">AWS Deep Learning AMI</a>.</li>`,Va,Zt,Ha,Bt,pn=`Con el mismo script usado en <a href="https://huggingface.co/docs/transformers/main/es/serialization#using-torchscript-in-python" rel="nofollow">Uso de TorchScript en Python</a> | |
| para rastrear un “BertModel”, puedes importar la extensión del <em>framework</em> <code>torch.neuron</code> para acceder a los componentes | |
| del SDK de Neuron a través de una API de Python.`,qa,It,za,kt,dn="Y modificando la línea de código de rastreo de:",La,_t,Qa,Wt,cn="con lo siguiente:",Sa,Xt,Fa,Nt,mn="Este cambio permite a Neuron SDK rastrear el modelo y optimizarlo para ejecutarse en instancias Inf1.",Ya,At,un=`Para obtener más información sobre las funciones, las herramientas, los tutoriales de ejemplo y las últimas actualizaciones | |
| de AWS Neuron SDK, consulte la <a href="https://awsdocs-neuron.readthedocs-hosted.com/en/latest/index.html" rel="nofollow">documentación de AWS NeuronSDK</a>.`,Pa,Gt,Oa,Et,Da;return h=new $({props:{title:"Exportar modelos 🤗 Transformers",local:"exportar-modelos--transformers",headingTag:"h1"}}),N=new $({props:{title:"ONNX",local:"onnx",headingTag:"h2"}}),z=new $({props:{title:"Exportar un model a ONNX",local:"exportar-un-model-a-onnx",headingTag:"h3"}}),Q=new T({props:{code:"cGlwJTIwaW5zdGFsbCUyMHRyYW5zZm9ybWVycyU1Qm9ubnglNUQ=",highlighted:"pip install transformers[onnx]",wrap:!1}}),F=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0taGVscCUwQSUwQXVzYWdlJTNBJTIwSHVnZ2luZyUyMEZhY2UlMjBUcmFuc2Zvcm1lcnMlMjBPTk5YJTIwZXhwb3J0ZXIlMjAlNUItaCU1RCUyMC1tJTIwTU9ERUwlMjAlNUItLWZlYXR1cmUlMjAlN0JjYXVzYWwtbG0lMkMlMjAuLi4lN0QlNUQlMjAlNUItLW9wc2V0JTIwT1BTRVQlNUQlMjAlNUItLWF0b2wlMjBBVE9MJTVEJTIwb3V0cHV0JTBBJTBBcG9zaXRpb25hbCUyMGFyZ3VtZW50cyUzQSUwQSUyMCUyMG91dHB1dCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMFBhdGglMjBpbmRpY2F0aW5nJTIwd2hlcmUlMjB0byUyMHN0b3JlJTIwZ2VuZXJhdGVkJTIwT05OWCUyMG1vZGVsLiUwQSUwQW9wdGlvbmFsJTIwYXJndW1lbnRzJTNBJTBBJTIwJTIwLWglMkMlMjAtLWhlbHAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaG93JTIwdGhpcyUyMGhlbHAlMjBtZXNzYWdlJTIwYW5kJTIwZXhpdCUwQSUyMCUyMC1tJTIwTU9ERUwlMkMlMjAtLW1vZGVsJTIwTU9ERUwlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBNb2RlbCUyMElEJTIwb24lMjBodWdnaW5nZmFjZS5jbyUyMG9yJTIwcGF0aCUyMG9uJTIwZGlzayUyMHRvJTIwbG9hZCUyMG1vZGVsJTIwZnJvbS4lMEElMjAlMjAtLWZlYXR1cmUlMjAlN0JjYXVzYWwtbG0lMkMlMjAuLi4lN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBUaGUlMjB0eXBlJTIwb2YlMjBmZWF0dXJlcyUyMHRvJTIwZXhwb3J0JTIwdGhlJTIwbW9kZWwlMjB3aXRoLiUwQSUyMCUyMC0tb3BzZXQlMjBPUFNFVCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME9OTlglMjBvcHNldCUyMHZlcnNpb24lMjB0byUyMGV4cG9ydCUyMHRoZSUyMG1vZGVsJTIwd2l0aC4lMEElMjAlMjAtLWF0b2wlMjBBVE9MJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwQWJzb2x1dGUlMjBkaWZmZXJlbmNlJTIwdG9sZXJlbmNlJTIwd2hlbiUyMHZhbGlkYXRpbmclMjB0aGUlMjBtb2RlbC4=",highlighted:`python -m transformers.onnx --<span class="hljs-built_in">help</span> | |
| usage: Hugging Face Transformers ONNX exporter [-h] -m MODEL [--feature {causal-lm, ...}] [--opset OPSET] [--atol ATOL] output | |
| positional arguments: | |
| output Path indicating <span class="hljs-built_in">where</span> to store generated ONNX model. | |
| optional arguments: | |
| -h, --<span class="hljs-built_in">help</span> show this <span class="hljs-built_in">help</span> message and <span class="hljs-built_in">exit</span> | |
| -m MODEL, --model MODEL | |
| Model ID on huggingface.co or path on disk to load model from. | |
| --feature {causal-lm, ...} | |
| The <span class="hljs-built_in">type</span> of features to <span class="hljs-built_in">export</span> the model with. | |
| --opset OPSET ONNX opset version to <span class="hljs-built_in">export</span> the model with. | |
| --atol ATOL Absolute difference tolerence when validating the model.`,wrap:!1}}),P=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjBvbm54JTJG",highlighted:"python -m transformers.onnx --model=distilbert/distilbert-base-uncased onnx/",wrap:!1}}),D=new T({props:{code:"VmFsaWRhdGluZyUyME9OTlglMjBtb2RlbC4uLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBPTk5YJTIwbW9kZWwlMjBvdXRwdXQlMjBuYW1lcyUyMG1hdGNoJTIwcmVmZXJlbmNlJTIwbW9kZWwlMjAoJTdCJ2xhc3RfaGlkZGVuX3N0YXRlJyU3RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwVmFsaWRhdGluZyUyME9OTlglMjBNb2RlbCUyMG91dHB1dCUyMCUyMmxhc3RfaGlkZGVuX3N0YXRlJTIyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSU1QiVFMiU5QyU5MyU1RCUyMCgyJTJDJTIwOCUyQyUyMDc2OCklMjBtYXRjaGVzJTIwKDIlMkMlMjA4JTJDJTIwNzY4KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBhbGwlMjB2YWx1ZXMlMjBjbG9zZSUyMChhdG9sJTNBJTIwMWUtMDUpJTBBQWxsJTIwZ29vZCUyQyUyMG1vZGVsJTIwc2F2ZWQlMjBhdCUzQSUyMG9ubnglMkZtb2RlbC5vbm54",highlighted:`Validating ONNX model... | |
| -[✓] ONNX model output names match reference model ({<span class="hljs-string">'last_hidden_state'</span>}) | |
| - Validating ONNX Model output <span class="hljs-string">"last_hidden_state"</span>: | |
| -[✓] (2, 8, 768) matches (2, 8, 768) | |
| -[✓] all values close (atol: 1e-05) | |
| All good, model saved at: onnx/model.onnx`,wrap:!1}}),te=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEFmcm9tJTIwb25ueHJ1bnRpbWUlMjBpbXBvcnQlMjBJbmZlcmVuY2VTZXNzaW9uJTBBJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydCUyRmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKSUwQXNlc3Npb24lMjAlM0QlMjBJbmZlcmVuY2VTZXNzaW9uKCUyMm9ubnglMkZtb2RlbC5vbm54JTIyKSUwQSUyMyUyME9OTlglMjBSdW50aW1lJTIwZXhwZWN0cyUyME51bVB5JTIwYXJyYXlzJTIwYXMlMjBpbnB1dCUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMjJVc2luZyUyMERpc3RpbEJFUlQlMjB3aXRoJTIwT05OWCUyMFJ1bnRpbWUhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJucCUyMiklMEFvdXRwdXRzJTIwJTNEJTIwc2Vzc2lvbi5ydW4ob3V0cHV0X25hbWVzJTNEJTVCJTIybGFzdF9oaWRkZW5fc3RhdGUlMjIlNUQlMkMlMjBpbnB1dF9mZWVkJTNEZGljdChpbnB1dHMpKQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> onnxruntime <span class="hljs-keyword">import</span> InferenceSession | |
| <span class="hljs-meta">>>> </span>tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span>session = InferenceSession(<span class="hljs-string">"onnx/model.onnx"</span>) | |
| <span class="hljs-meta">>>> </span><span class="hljs-comment"># ONNX Runtime expects NumPy arrays as input</span> | |
| <span class="hljs-meta">>>> </span>inputs = tokenizer(<span class="hljs-string">"Using DistilBERT with ONNX Runtime!"</span>, return_tensors=<span class="hljs-string">"np"</span>) | |
| <span class="hljs-meta">>>> </span>outputs = session.run(output_names=[<span class="hljs-string">"last_hidden_state"</span>], input_feed=<span class="hljs-built_in">dict</span>(inputs))`,wrap:!1}}),ae=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5tb2RlbHMuZGlzdGlsYmVydCUyMGltcG9ydCUyMERpc3RpbEJlcnRDb25maWclMkMlMjBEaXN0aWxCZXJ0T25ueENvbmZpZyUwQSUwQWNvbmZpZyUyMCUzRCUyMERpc3RpbEJlcnRDb25maWcoKSUwQW9ubnhfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydE9ubnhDb25maWcoY29uZmlnKSUwQXByaW50KGxpc3Qob25ueF9jb25maWcub3V0cHV0cy5rZXlzKCkpKQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers.models.distilbert <span class="hljs-keyword">import</span> DistilBertConfig, DistilBertOnnxConfig | |
| <span class="hljs-meta">>>> </span>config = DistilBertConfig() | |
| <span class="hljs-meta">>>> </span>onnx_config = DistilBertOnnxConfig(config) | |
| <span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(<span class="hljs-built_in">list</span>(onnx_config.outputs.keys())) | |
| [<span class="hljs-string">"last_hidden_state"</span>]s`,wrap:!1}}),ne=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RrZXJhcy1pbyUyRnRyYW5zZm9ybWVycy1xYSUyMG9ubnglMkY=",highlighted:"python -m transformers.onnx --model=keras-io/transformers-qa onnx/",wrap:!1}}),v=new Bn({props:{pytorch:!0,tensorflow:!0,jax:!1,$$slots:{tensorflow:[Xn],pytorch:[_n]},$$scope:{ctx:w}}}),ie=new $({props:{title:"Seleccionar características para diferentes topologías de un modelo",local:"seleccionar-características-para-diferentes-topologías-de-un-modelo",headingTag:"h3"}}),ce=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54LmZlYXR1cmVzJTIwaW1wb3J0JTIwRmVhdHVyZXNNYW5hZ2VyJTBBJTBBZGlzdGlsYmVydF9mZWF0dXJlcyUyMCUzRCUyMGxpc3QoRmVhdHVyZXNNYW5hZ2VyLmdldF9zdXBwb3J0ZWRfZmVhdHVyZXNfZm9yX21vZGVsX3R5cGUoJTIyZGlzdGlsYmVydCUyMikua2V5cygpKSUwQXByaW50KGRpc3RpbGJlcnRfZmVhdHVyZXMp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers.onnx.features <span class="hljs-keyword">import</span> FeaturesManager | |
| <span class="hljs-meta">>>> </span>distilbert_features = <span class="hljs-built_in">list</span>(FeaturesManager.get_supported_features_for_model_type(<span class="hljs-string">"distilbert"</span>).keys()) | |
| <span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(distilbert_features) | |
| [<span class="hljs-string">"default"</span>, <span class="hljs-string">"masked-lm"</span>, <span class="hljs-string">"causal-lm"</span>, <span class="hljs-string">"sequence-classification"</span>, <span class="hljs-string">"token-classification"</span>, <span class="hljs-string">"question-answering"</span>]`,wrap:!1}}),ue=new T({props:{code:"cHl0aG9uJTIwLW0lMjB0cmFuc2Zvcm1lcnMub25ueCUyMC0tbW9kZWwlM0RkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjAlNUMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtLWZlYXR1cmUlM0RzZXF1ZW5jZS1jbGFzc2lmaWNhdGlvbiUyMG9ubnglMkY=",highlighted:`python -m transformers.onnx --model=distilbert/distilbert-base-uncased-finetuned-sst-2-english \\ | |
| --feature=sequence-classification onnx/`,wrap:!1}}),fe=new T({props:{code:"VmFsaWRhdGluZyUyME9OTlglMjBtb2RlbC4uLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0lNUIlRTIlOUMlOTMlNUQlMjBPTk5YJTIwbW9kZWwlMjBvdXRwdXQlMjBuYW1lcyUyMG1hdGNoJTIwcmVmZXJlbmNlJTIwbW9kZWwlMjAoJTdCJ2xvZ2l0cyclN0QpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSUyMFZhbGlkYXRpbmclMjBPTk5YJTIwTW9kZWwlMjBvdXRwdXQlMjAlMjJsb2dpdHMlMjIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTVCJUUyJTlDJTkzJTVEJTIwKDIlMkMlMjAyKSUyMG1hdGNoZXMlMjAoMiUyQyUyMDIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLSU1QiVFMiU5QyU5MyU1RCUyMGFsbCUyMHZhbHVlcyUyMGNsb3NlJTIwKGF0b2wlM0ElMjAxZS0wNSklMEFBbGwlMjBnb29kJTJDJTIwbW9kZWwlMjBzYXZlZCUyMGF0JTNBJTIwb25ueCUyRm1vZGVsLm9ubng=",highlighted:`Validating ONNX model... | |
| -[✓] ONNX model output names match reference model ({<span class="hljs-string">'logits'</span>}) | |
| - Validating ONNX Model output <span class="hljs-string">"logits"</span>: | |
| -[✓] (2, 2) matches (2, 2) | |
| -[✓] all values close (atol: 1e-05) | |
| All good, model saved at: onnx/model.onnx`,wrap:!1}}),x=new Rt({props:{$$slots:{default:[Nn]},$$scope:{ctx:w}}}),je=new $({props:{title:"Exportar un modelo para una arquitectura no compatible",local:"exportar-un-modelo-para-una-arquitectura-no-compatible",headingTag:"h3"}}),he=new $({props:{title:"Implementar una configuración personalizada en ONNX",local:"implementar-una-configuración-personalizada-en-onnx",headingTag:"h4"}}),Z=new Rt({props:{$$slots:{default:[An]},$$scope:{ctx:w}}}),Ue=new T({props:{code:"ZnJvbSUyMHR5cGluZyUyMGltcG9ydCUyME1hcHBpbmclMkMlMjBPcmRlcmVkRGljdCUwQWZyb20lMjB0cmFuc2Zvcm1lcnMub25ueCUyMGltcG9ydCUyME9ubnhDb25maWclMEElMEElMEFjbGFzcyUyMERpc3RpbEJlcnRPbm54Q29uZmlnKE9ubnhDb25maWcpJTNBJTBBJTIwJTIwJTIwJTIwJTQwcHJvcGVydHklMEElMjAlMjAlMjAlMjBkZWYlMjBpbnB1dHMoc2VsZiklMjAtJTNFJTIwTWFwcGluZyU1QnN0ciUyQyUyME1hcHBpbmclNUJpbnQlMkMlMjBzdHIlNUQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBPcmRlcmVkRGljdCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTdCMCUzQSUyMCUyMmJhdGNoJTIyJTJDJTIwMSUzQSUyMCUyMnNlcXVlbmNlJTIyJTdEKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCglMjJhdHRlbnRpb25fbWFzayUyMiUyQyUyMCU3QjAlM0ElMjAlMjJiYXRjaCUyMiUyQyUyMDElM0ElMjAlMjJzZXF1ZW5jZSUyMiU3RCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> typing <span class="hljs-keyword">import</span> Mapping, OrderedDict | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> OnnxConfig | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">class</span> <span class="hljs-title class_">DistilBertOnnxConfig</span>(<span class="hljs-title class_ inherited__">OnnxConfig</span>): | |
| <span class="hljs-meta">... </span> @<span class="hljs-built_in">property</span> | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">def</span> <span class="hljs-title function_">inputs</span>(<span class="hljs-params">self</span>) -> Mapping[<span class="hljs-built_in">str</span>, Mapping[<span class="hljs-built_in">int</span>, <span class="hljs-built_in">str</span>]]: | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">return</span> OrderedDict( | |
| <span class="hljs-meta">... </span> [ | |
| <span class="hljs-meta">... </span> (<span class="hljs-string">"input_ids"</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">"batch"</span>, <span class="hljs-number">1</span>: <span class="hljs-string">"sequence"</span>}), | |
| <span class="hljs-meta">... </span> (<span class="hljs-string">"attention_mask"</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">"batch"</span>, <span class="hljs-number">1</span>: <span class="hljs-string">"sequence"</span>}), | |
| <span class="hljs-meta">... </span> ] | |
| <span class="hljs-meta">... </span> )`,wrap:!1}}),B=new Rt({props:{$$slots:{default:[Gn]},$$scope:{ctx:w}}}),xe=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Db25maWclMEElMEFjb25maWclMjAlM0QlMjBBdXRvQ29uZmlnLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBb25ueF9jb25maWclMjAlM0QlMjBEaXN0aWxCZXJ0T25ueENvbmZpZyhjb25maWcp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig | |
| <span class="hljs-meta">>>> </span>config = AutoConfig.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span>onnx_config = DistilBertOnnxConfig(config)`,wrap:!1}}),Be=new T({props:{code:"cHJpbnQob25ueF9jb25maWcuZGVmYXVsdF9vbm54X29wc2V0KQ==",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(onnx_config.default_onnx_opset) | |
| <span class="hljs-number">11</span>`,wrap:!1}}),ke=new T({props:{code:"cHJpbnQob25ueF9jb25maWcub3V0cHV0cyk=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(onnx_config.outputs) | |
| OrderedDict([(<span class="hljs-string">"last_hidden_state"</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">"batch"</span>, <span class="hljs-number">1</span>: <span class="hljs-string">"sequence"</span>})])`,wrap:!1}}),We=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Db25maWclMEElMEFjb25maWclMjAlM0QlMjBBdXRvQ29uZmlnLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBb25ueF9jb25maWdfZm9yX3NlcV9jbGYlMjAlM0QlMjBEaXN0aWxCZXJ0T25ueENvbmZpZyhjb25maWclMkMlMjB0YXNrJTNEJTIyc2VxdWVuY2UtY2xhc3NpZmljYXRpb24lMjIpJTBBcHJpbnQob25ueF9jb25maWdfZm9yX3NlcV9jbGYub3V0cHV0cyk=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoConfig | |
| <span class="hljs-meta">>>> </span>config = AutoConfig.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-meta">>>> </span>onnx_config_for_seq_clf = DistilBertOnnxConfig(config, task=<span class="hljs-string">"sequence-classification"</span>) | |
| <span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(onnx_config_for_seq_clf.outputs) | |
| OrderedDict([(<span class="hljs-string">'logits'</span>, {<span class="hljs-number">0</span>: <span class="hljs-string">'batch'</span>})])`,wrap:!1}}),I=new Rt({props:{$$slots:{default:[Rn]},$$scope:{ctx:w}}}),Xe=new $({props:{title:"Exportar el modelo",local:"exportar-el-modelo",headingTag:"h4"}}),Ae=new T({props:{code:"ZnJvbSUyMHBhdGhsaWIlMjBpbXBvcnQlMjBQYXRoJTBBZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54JTIwaW1wb3J0JTIwZXhwb3J0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEFvbm54X3BhdGglMjAlM0QlMjBQYXRoKCUyMm1vZGVsLm9ubnglMjIpJTBBbW9kZWxfY2twdCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQlMkZkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQWJhc2VfbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NrcHQpJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2twdCklMEElMEFvbm54X2lucHV0cyUyQyUyMG9ubnhfb3V0cHV0cyUyMCUzRCUyMGV4cG9ydCh0b2tlbml6ZXIlMkMlMjBiYXNlX21vZGVsJTJDJTIwb25ueF9jb25maWclMkMlMjBvbm54X2NvbmZpZy5kZWZhdWx0X29ubnhfb3BzZXQlMkMlMjBvbm54X3BhdGgp",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> export | |
| <span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel | |
| <span class="hljs-meta">>>> </span>onnx_path = Path(<span class="hljs-string">"model.onnx"</span>) | |
| <span class="hljs-meta">>>> </span>model_ckpt = <span class="hljs-string">"distilbert/distilbert-base-uncased"</span> | |
| <span class="hljs-meta">>>> </span>base_model = AutoModel.from_pretrained(model_ckpt) | |
| <span class="hljs-meta">>>> </span>tokenizer = AutoTokenizer.from_pretrained(model_ckpt) | |
| <span class="hljs-meta">>>> </span>onnx_inputs, onnx_outputs = export(tokenizer, base_model, onnx_config, onnx_config.default_onnx_opset, onnx_path)`,wrap:!1}}),Re=new T({props:{code:"aW1wb3J0JTIwb25ueCUwQSUwQW9ubnhfbW9kZWwlMjAlM0QlMjBvbm54LmxvYWQoJTIybW9kZWwub25ueCUyMiklMEFvbm54LmNoZWNrZXIuY2hlY2tfbW9kZWwob25ueF9tb2RlbCk=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">import</span> onnx | |
| <span class="hljs-meta">>>> </span>onnx_model = onnx.load(<span class="hljs-string">"model.onnx"</span>) | |
| <span class="hljs-meta">>>> </span>onnx.checker.check_model(onnx_model)`,wrap:!1}}),k=new Rt({props:{$$slots:{default:[En]},$$scope:{ctx:w}}}),Ee=new $({props:{title:"Validar los resultados del modelo",local:"validar-los-resultados-del-modelo",headingTag:"h4"}}),He=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5vbm54JTIwaW1wb3J0JTIwdmFsaWRhdGVfbW9kZWxfb3V0cHV0cyUwQSUwQXZhbGlkYXRlX21vZGVsX291dHB1dHMoJTBBJTIwJTIwJTIwJTIwb25ueF9jb25maWclMkMlMjB0b2tlbml6ZXIlMkMlMjBiYXNlX21vZGVsJTJDJTIwb25ueF9wYXRoJTJDJTIwb25ueF9vdXRwdXRzJTJDJTIwb25ueF9jb25maWcuYXRvbF9mb3JfdmFsaWRhdGlvbiUwQSk=",highlighted:`<span class="hljs-meta">>>> </span><span class="hljs-keyword">from</span> transformers.onnx <span class="hljs-keyword">import</span> validate_model_outputs | |
| <span class="hljs-meta">>>> </span>validate_model_outputs( | |
| <span class="hljs-meta">... </span> onnx_config, tokenizer, base_model, onnx_path, onnx_outputs, onnx_config.atol_for_validation | |
| <span class="hljs-meta">... </span>)`,wrap:!1}}),ze=new $({props:{title:"Contribuir con una nueva configuración a 🤗 Transformers",local:"contribuir-con-una-nueva-configuración-a--transformers",headingTag:"h3"}}),Fe=new $({props:{title:"TorchScript",local:"torchscript",headingTag:"h2"}}),_=new Rt({props:{$$slots:{default:[Vn]},$$scope:{ctx:w}}}),et=new $({props:{title:"Indicador de TorchScript y pesos atados",local:"indicador-de-torchscript-y-pesos-atados",headingTag:"h3"}}),st=new $({props:{title:"Entradas ficticias y longitudes estándar",local:"entradas-ficticias-y-longitudes-estándar",headingTag:"h3"}}),dt=new $({props:{title:"Usar TorchScript en Python",local:"usar-torchscript-en-python",headingTag:"h3"}}),mt=new $({props:{title:"Guardando un modelo",local:"guardando-un-modelo",headingTag:"h4"}}),Mt=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUyQyUyMEJlcnRUb2tlbml6ZXIlMkMlMjBCZXJ0Q29uZmlnJTBBaW1wb3J0JTIwdG9yY2glMEElMEFlbmMlMjAlM0QlMjBCZXJ0VG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJnb29nbGUtYmVydCUyRmJlcnQtYmFzZS11bmNhc2VkJTIyKSUwQSUwQSUyMyUyMFRva2VuaXppbmclMjBpbnB1dCUyMHRleHQlMEF0ZXh0JTIwJTNEJTIwJTIyJTVCQ0xTJTVEJTIwV2hvJTIwd2FzJTIwSmltJTIwSGVuc29uJTIwJTNGJTIwJTVCU0VQJTVEJTIwSmltJTIwSGVuc29uJTIwd2FzJTIwYSUyMHB1cHBldGVlciUyMCU1QlNFUCU1RCUyMiUwQXRva2VuaXplZF90ZXh0JTIwJTNEJTIwZW5jLnRva2VuaXplKHRleHQpJTBBJTBBJTIzJTIwTWFza2luZyUyMG9uZSUyMG9mJTIwdGhlJTIwaW5wdXQlMjB0b2tlbnMlMEFtYXNrZWRfaW5kZXglMjAlM0QlMjA4JTBBdG9rZW5pemVkX3RleHQlNUJtYXNrZWRfaW5kZXglNUQlMjAlM0QlMjAlMjIlNUJNQVNLJTVEJTIyJTBBaW5kZXhlZF90b2tlbnMlMjAlM0QlMjBlbmMuY29udmVydF90b2tlbnNfdG9faWRzKHRva2VuaXplZF90ZXh0KSUwQXNlZ21lbnRzX2lkcyUyMCUzRCUyMCU1QjAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTBBJTBBJTIzJTIwQ3JlYXRpbmclMjBhJTIwZHVtbXklMjBpbnB1dCUwQXRva2Vuc190ZW5zb3IlMjAlM0QlMjB0b3JjaC50ZW5zb3IoJTVCaW5kZXhlZF90b2tlbnMlNUQpJTBBc2VnbWVudHNfdGVuc29ycyUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUJzZWdtZW50c19pZHMlNUQpJTBBZHVtbXlfaW5wdXQlMjAlM0QlMjAlNUJ0b2tlbnNfdGVuc29yJTJDJTIwc2VnbWVudHNfdGVuc29ycyU1RCUwQSUwQSUyMyUyMEluaXRpYWxpemluZyUyMHRoZSUyMG1vZGVsJTIwd2l0aCUyMHRoZSUyMHRvcmNoc2NyaXB0JTIwZmxhZyUwQSUyMyUyMEZsYWclMjBzZXQlMjB0byUyMFRydWUlMjBldmVuJTIwdGhvdWdoJTIwaXQlMjBpcyUyMG5vdCUyMG5lY2Vzc2FyeSUyMGFzJTIwdGhpcyUyMG1vZGVsJTIwZG9lcyUyMG5vdCUyMGhhdmUlMjBhbiUyMExNJTIwSGVhZC4lMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCUwQSUyMCUyMCUyMCUyMHZvY2FiX3NpemVfb3JfY29uZmlnX2pzb25fZmlsZSUzRDMyMDAwJTJDJTBBJTIwJTIwJTIwJTIwaGlkZGVuX3NpemUlM0Q3NjglMkMlMEElMjAlMjAlMjAlMjBudW1faGlkZGVuX2xheWVycyUzRDEyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX2F0dGVudGlvbl9oZWFkcyUzRDEyJTJDJTBBJTIwJTIwJTIwJTIwaW50ZXJtZWRpYXRlX3NpemUlM0QzMDcyJTJDJTBBJTIwJTIwJTIwJTIwdG9yY2hzY3JpcHQlM0RUcnVlJTJDJTBBKSUwQSUwQSUyMyUyMEluc3RhbnRpYXRpbmclMjB0aGUlMjBtb2RlbCUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsKGNvbmZpZyklMEElMEElMjMlMjBUaGUlMjBtb2RlbCUyMG5lZWRzJTIwdG8lMjBiZSUyMGluJTIwZXZhbHVhdGlvbiUyMG1vZGUlMEFtb2RlbC5ldmFsKCklMEElMEElMjMlMjBJZiUyMHlvdSUyMGFyZSUyMGluc3RhbnRpYXRpbmclMjB0aGUlMjBtb2RlbCUyMHdpdGglMjAqZnJvbV9wcmV0cmFpbmVkKiUyMHlvdSUyMGNhbiUyMGFsc28lMjBlYXNpbHklMjBzZXQlMjB0aGUlMjBUb3JjaFNjcmlwdCUyMGZsYWclMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyZ29vZ2xlLWJlcnQlMkZiZXJ0LWJhc2UtdW5jYXNlZCUyMiUyQyUyMHRvcmNoc2NyaXB0JTNEVHJ1ZSklMEElMEElMjMlMjBDcmVhdGluZyUyMHRoZSUyMHRyYWNlJTBBdHJhY2VkX21vZGVsJTIwJTNEJTIwdG9yY2guaml0LnRyYWNlKG1vZGVsJTJDJTIwJTVCdG9rZW5zX3RlbnNvciUyQyUyMHNlZ21lbnRzX3RlbnNvcnMlNUQpJTBBdG9yY2guaml0LnNhdmUodHJhY2VkX21vZGVsJTJDJTIwJTIydHJhY2VkX2JlcnQucHQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel, BertTokenizer, BertConfig | |
| <span class="hljs-keyword">import</span> torch | |
| enc = BertTokenizer.from_pretrained(<span class="hljs-string">"google-bert/bert-base-uncased"</span>) | |
| <span class="hljs-comment"># Tokenizing input text</span> | |
| text = <span class="hljs-string">"[CLS] Who was Jim Henson ? [SEP] Jim Henson was a puppeteer [SEP]"</span> | |
| tokenized_text = enc.tokenize(text) | |
| <span class="hljs-comment"># Masking one of the input tokens</span> | |
| masked_index = <span class="hljs-number">8</span> | |
| tokenized_text[masked_index] = <span class="hljs-string">"[MASK]"</span> | |
| indexed_tokens = enc.convert_tokens_to_ids(tokenized_text) | |
| segments_ids = [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>] | |
| <span class="hljs-comment"># Creating a dummy input</span> | |
| tokens_tensor = torch.tensor([indexed_tokens]) | |
| segments_tensors = torch.tensor([segments_ids]) | |
| dummy_input = [tokens_tensor, segments_tensors] | |
| <span class="hljs-comment"># Initializing the model with the torchscript flag</span> | |
| <span class="hljs-comment"># Flag set to True even though it is not necessary as this model does not have an LM Head.</span> | |
| config = BertConfig( | |
| vocab_size_or_config_json_file=<span class="hljs-number">32000</span>, | |
| hidden_size=<span class="hljs-number">768</span>, | |
| num_hidden_layers=<span class="hljs-number">12</span>, | |
| num_attention_heads=<span class="hljs-number">12</span>, | |
| intermediate_size=<span class="hljs-number">3072</span>, | |
| torchscript=<span class="hljs-literal">True</span>, | |
| ) | |
| <span class="hljs-comment"># Instantiating the model</span> | |
| model = BertModel(config) | |
| <span class="hljs-comment"># The model needs to be in evaluation mode</span> | |
| model.<span class="hljs-built_in">eval</span>() | |
| <span class="hljs-comment"># If you are instantiating the model with *from_pretrained* you can also easily set the TorchScript flag</span> | |
| model = BertModel.from_pretrained(<span class="hljs-string">"google-bert/bert-base-uncased"</span>, torchscript=<span class="hljs-literal">True</span>) | |
| <span class="hljs-comment"># Creating the trace</span> | |
| traced_model = torch.jit.trace(model, [tokens_tensor, segments_tensors]) | |
| torch.jit.save(traced_model, <span class="hljs-string">"traced_bert.pt"</span>)`,wrap:!1}}),ft=new $({props:{title:"Cargar un modelo",local:"cargar-un-modelo",headingTag:"h4"}}),jt=new T({props:{code:"bG9hZGVkX21vZGVsJTIwJTNEJTIwdG9yY2guaml0LmxvYWQoJTIydHJhY2VkX2JlcnQucHQlMjIpJTBBbG9hZGVkX21vZGVsLmV2YWwoKSUwQSUwQWFsbF9lbmNvZGVyX2xheWVycyUyQyUyMHBvb2xlZF9vdXRwdXQlMjAlM0QlMjBsb2FkZWRfbW9kZWwoKmR1bW15X2lucHV0KQ==",highlighted:`loaded_model = torch.jit.load(<span class="hljs-string">"traced_bert.pt"</span>) | |
| loaded_model.<span class="hljs-built_in">eval</span>() | |
| all_encoder_layers, pooled_output = loaded_model(*dummy_input)`,wrap:!1}}),bt=new $({props:{title:"Usar un modelo rastreado para la inferencia",local:"usar-un-modelo-rastreado-para-la-inferencia",headingTag:"h4"}}),Tt=new T({props:{code:"dHJhY2VkX21vZGVsKHRva2Vuc190ZW5zb3IlMkMlMjBzZWdtZW50c190ZW5zb3JzKQ==",highlighted:"traced_model(tokens_tensor, segments_tensors)",wrap:!1}}),ht=new $({props:{title:"Implementar los modelos HuggingFace TorchScript en AWS mediante Neuron SDK",local:"implementar-los-modelos-huggingface-torchscript-en-aws-mediante-neuron-sdk",headingTag:"h3"}}),$t=new $({props:{title:"Implicaciones",local:"implicaciones",headingTag:"h4"}}),Ct=new $({props:{title:"Dependencias",local:"dependencias",headingTag:"h4"}}),Zt=new $({props:{title:"Convertir un modelo a AWS Neuron",local:"convertir-un-modelo-a-aws-neuron",headingTag:"h4"}}),It=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUyQyUyMEJlcnRUb2tlbml6ZXIlMkMlMjBCZXJ0Q29uZmlnJTBBaW1wb3J0JTIwdG9yY2glMEFpbXBvcnQlMjB0b3JjaC5uZXVyb24=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel, BertTokenizer, BertConfig | |
| <span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">import</span> torch.neuron`,wrap:!1}}),_t=new T({props:{code:"dG9yY2guaml0LnRyYWNlKG1vZGVsJTJDJTIwJTVCdG9rZW5zX3RlbnNvciUyQyUyMHNlZ21lbnRzX3RlbnNvcnMlNUQp",highlighted:"torch.jit.trace(model, [tokens_tensor, segments_tensors])",wrap:!1}}),Xt=new T({props:{code:"dG9yY2gubmV1cm9uLnRyYWNlKG1vZGVsJTJDJTIwJTVCdG9rZW5fdGVuc29yJTJDJTIwc2VnbWVudHNfdGVuc29ycyU1RCk=",highlighted:"torch.neuron.trace(model, [token_tensor, segments_tensors])",wrap:!1}}),Gt=new In({props:{source:"https://github.com/huggingface/transformers/blob/main/docs/source/es/serialization.md"}}),{c(){o=r("meta"),b=s(),i=r("p"),g=s(),c(h.$$.fragment),J=s(),U=r("p"),U.textContent=j,C=s(),X=r("p"),X.innerHTML=Ka,Vt=s(),c(N.$$.fragment),Ht=s(),A=r("p"),A.innerHTML=es,qt=s(),G=r("p"),G.textContent=ts,zt=s(),R=r("p"),R.innerHTML=ls,Lt=s(),E=r("p"),E.textContent=as,Qt=s(),V=r("ul"),V.innerHTML=ss,St=s(),H=r("p"),H.textContent=ns,Ft=s(),q=r("ul"),q.innerHTML=os,Yt=s(),c(z.$$.fragment),Pt=s(),L=r("p"),L.textContent=is,Ot=s(),c(Q.$$.fragment),Dt=s(),S=r("p"),S.innerHTML=rs,Kt=s(),c(F.$$.fragment),el=s(),Y=r("p"),Y.textContent=ps,tl=s(),c(P.$$.fragment),ll=s(),O=r("p"),O.textContent=ds,al=s(),c(D.$$.fragment),sl=s(),K=r("p"),K.innerHTML=cs,nl=s(),ee=r("p"),ee.innerHTML=ms,ol=s(),c(te.$$.fragment),il=s(),le=r("p"),le.innerHTML=us,rl=s(),c(ae.$$.fragment),pl=s(),se=r("p"),se.innerHTML=Ms,dl=s(),c(ne.$$.fragment),cl=s(),oe=r("p"),oe.textContent=fs,ml=s(),c(v.$$.fragment),ul=s(),c(ie.$$.fragment),Ml=s(),re=r("p"),re.innerHTML=ys,fl=s(),pe=r("table"),pe.innerHTML=js,yl=s(),de=r("p"),de.innerHTML=bs,jl=s(),c(ce.$$.fragment),bl=s(),me=r("p"),me.innerHTML=gs,gl=s(),c(ue.$$.fragment),Tl=s(),Me=r("p"),Me.textContent=Ts,hl=s(),c(fe.$$.fragment),wl=s(),ye=r("p"),ye.innerHTML=hs,Jl=s(),c(x.$$.fragment),$l=s(),c(je.$$.fragment),Ul=s(),be=r("p"),be.textContent=ws,Cl=s(),ge=r("ol"),ge.innerHTML=Js,vl=s(),Te=r("p"),Te.textContent=$s,xl=s(),c(he.$$.fragment),Zl=s(),we=r("p"),we.textContent=Us,Bl=s(),Je=r("ul"),Je.innerHTML=Cs,Il=s(),c(Z.$$.fragment),kl=s(),$e=r("p"),$e.innerHTML=vs,_l=s(),c(Ue.$$.fragment),Wl=s(),Ce=r("p"),Ce.innerHTML=xs,Xl=s(),c(B.$$.fragment),Nl=s(),ve=r("p"),ve.textContent=Zs,Al=s(),c(xe.$$.fragment),Gl=s(),Ze=r("p"),Ze.textContent=Bs,Rl=s(),c(Be.$$.fragment),El=s(),Ie=r("p"),Ie.textContent=Is,Vl=s(),c(ke.$$.fragment),Hl=s(),_e=r("p"),_e.innerHTML=ks,ql=s(),c(We.$$.fragment),zl=s(),c(I.$$.fragment),Ll=s(),c(Xe.$$.fragment),Ql=s(),Ne=r("p"),Ne.innerHTML=_s,Sl=s(),c(Ae.$$.fragment),Fl=s(),Ge=r("p"),Ge.innerHTML=Ws,Yl=s(),c(Re.$$.fragment),Pl=s(),c(k.$$.fragment),Ol=s(),c(Ee.$$.fragment),Dl=s(),Ve=r("p"),Ve.innerHTML=Xs,Kl=s(),c(He.$$.fragment),ea=s(),qe=r("p"),qe.innerHTML=Ns,ta=s(),c(ze.$$.fragment),la=s(),Le=r("p"),Le.textContent=As,aa=s(),Qe=r("ul"),Qe.innerHTML=Gs,sa=s(),Se=r("p"),Se.innerHTML=Rs,na=s(),c(Fe.$$.fragment),oa=s(),c(_.$$.fragment),ia=s(),Ye=r("p"),Ye.innerHTML=Es,ra=s(),Pe=r("p"),Pe.textContent=Vs,pa=s(),Oe=r("p"),Oe.textContent=Hs,da=s(),De=r("ul"),De.innerHTML=qs,ca=s(),Ke=r("p"),Ke.textContent=zs,ma=s(),c(et.$$.fragment),ua=s(),tt=r("p"),tt.innerHTML=Ls,Ma=s(),lt=r("p"),lt.innerHTML=Qs,fa=s(),at=r("p"),at.innerHTML=Ss,ya=s(),c(st.$$.fragment),ja=s(),nt=r("p"),nt.textContent=Fs,ba=s(),ot=r("p"),ot.textContent=Ys,ga=s(),it=r("p"),it.innerHTML=Ps,Ta=s(),rt=r("p"),rt.innerHTML=Os,ha=s(),pt=r("p"),pt.textContent=Ds,wa=s(),c(dt.$$.fragment),Ja=s(),ct=r("p"),ct.textContent=Ks,$a=s(),c(mt.$$.fragment),Ua=s(),ut=r("p"),ut.innerHTML=en,Ca=s(),c(Mt.$$.fragment),va=s(),c(ft.$$.fragment),xa=s(),yt=r("p"),yt.innerHTML=tn,Za=s(),c(jt.$$.fragment),Ba=s(),c(bt.$$.fragment),Ia=s(),gt=r("p"),gt.innerHTML=ln,ka=s(),c(Tt.$$.fragment),_a=s(),c(ht.$$.fragment),Wa=s(),wt=r("p"),wt.innerHTML=an,Xa=s(),Jt=r("ol"),Jt.innerHTML=sn,Na=s(),c($t.$$.fragment),Aa=s(),Ut=r("p"),Ut.innerHTML=nn,Ga=s(),c(Ct.$$.fragment),Ra=s(),vt=r("p"),vt.textContent=on,Ea=s(),xt=r("ul"),xt.innerHTML=rn,Va=s(),c(Zt.$$.fragment),Ha=s(),Bt=r("p"),Bt.innerHTML=pn,qa=s(),c(It.$$.fragment),za=s(),kt=r("p"),kt.textContent=dn,La=s(),c(_t.$$.fragment),Qa=s(),Wt=r("p"),Wt.textContent=cn,Sa=s(),c(Xt.$$.fragment),Fa=s(),Nt=r("p"),Nt.textContent=mn,Ya=s(),At=r("p"),At.innerHTML=un,Pa=s(),c(Gt.$$.fragment),Oa=s(),Et=r("p"),this.h()},l(e){const t=xn("svelte-u9bgzb",document.head);o=p(t,"META",{name:!0,content:!0}),t.forEach(l),b=n(e),i=p(e,"P",{}),hn(i).forEach(l),g=n(e),m(h.$$.fragment,e),J=n(e),U=p(e,"P",{"data-svelte-h":!0}),d(U)!=="svelte-1fx3vq8"&&(U.textContent=j),C=n(e),X=p(e,"P",{"data-svelte-h":!0}),d(X)!=="svelte-v0pjtx"&&(X.innerHTML=Ka),Vt=n(e),m(N.$$.fragment,e),Ht=n(e),A=p(e,"P",{"data-svelte-h":!0}),d(A)!=="svelte-8kqvys"&&(A.innerHTML=es),qt=n(e),G=p(e,"P",{"data-svelte-h":!0}),d(G)!=="svelte-7p5plo"&&(G.textContent=ts),zt=n(e),R=p(e,"P",{"data-svelte-h":!0}),d(R)!=="svelte-rxyuqc"&&(R.innerHTML=ls),Lt=n(e),E=p(e,"P",{"data-svelte-h":!0}),d(E)!=="svelte-b7160f"&&(E.textContent=as),Qt=n(e),V=p(e,"UL",{"data-svelte-h":!0}),d(V)!=="svelte-vz4lhh"&&(V.innerHTML=ss),St=n(e),H=p(e,"P",{"data-svelte-h":!0}),d(H)!=="svelte-194migv"&&(H.textContent=ns),Ft=n(e),q=p(e,"UL",{"data-svelte-h":!0}),d(q)!=="svelte-1223amv"&&(q.innerHTML=os),Yt=n(e),m(z.$$.fragment,e),Pt=n(e),L=p(e,"P",{"data-svelte-h":!0}),d(L)!=="svelte-1rezqc2"&&(L.textContent=is),Ot=n(e),m(Q.$$.fragment,e),Dt=n(e),S=p(e,"P",{"data-svelte-h":!0}),d(S)!=="svelte-5qhi33"&&(S.innerHTML=rs),Kt=n(e),m(F.$$.fragment,e),el=n(e),Y=p(e,"P",{"data-svelte-h":!0}),d(Y)!=="svelte-1xn293m"&&(Y.textContent=ps),tl=n(e),m(P.$$.fragment,e),ll=n(e),O=p(e,"P",{"data-svelte-h":!0}),d(O)!=="svelte-1ekqtp"&&(O.textContent=ds),al=n(e),m(D.$$.fragment,e),sl=n(e),K=p(e,"P",{"data-svelte-h":!0}),d(K)!=="svelte-olsb8t"&&(K.innerHTML=cs),nl=n(e),ee=p(e,"P",{"data-svelte-h":!0}),d(ee)!=="svelte-tcdasa"&&(ee.innerHTML=ms),ol=n(e),m(te.$$.fragment,e),il=n(e),le=p(e,"P",{"data-svelte-h":!0}),d(le)!=="svelte-1hbp2km"&&(le.innerHTML=us),rl=n(e),m(ae.$$.fragment,e),pl=n(e),se=p(e,"P",{"data-svelte-h":!0}),d(se)!=="svelte-1h30j8i"&&(se.innerHTML=Ms),dl=n(e),m(ne.$$.fragment,e),cl=n(e),oe=p(e,"P",{"data-svelte-h":!0}),d(oe)!=="svelte-1xwvftw"&&(oe.textContent=fs),ml=n(e),m(v.$$.fragment,e),ul=n(e),m(ie.$$.fragment,e),Ml=n(e),re=p(e,"P",{"data-svelte-h":!0}),d(re)!=="svelte-p07qxg"&&(re.innerHTML=ys),fl=n(e),pe=p(e,"TABLE",{"data-svelte-h":!0}),d(pe)!=="svelte-19g4mid"&&(pe.innerHTML=js),yl=n(e),de=p(e,"P",{"data-svelte-h":!0}),d(de)!=="svelte-z84cjd"&&(de.innerHTML=bs),jl=n(e),m(ce.$$.fragment,e),bl=n(e),me=p(e,"P",{"data-svelte-h":!0}),d(me)!=="svelte-1q0ce7p"&&(me.innerHTML=gs),gl=n(e),m(ue.$$.fragment,e),Tl=n(e),Me=p(e,"P",{"data-svelte-h":!0}),d(Me)!=="svelte-4a0cb6"&&(Me.textContent=Ts),hl=n(e),m(fe.$$.fragment,e),wl=n(e),ye=p(e,"P",{"data-svelte-h":!0}),d(ye)!=="svelte-4svxy9"&&(ye.innerHTML=hs),Jl=n(e),m(x.$$.fragment,e),$l=n(e),m(je.$$.fragment,e),Ul=n(e),be=p(e,"P",{"data-svelte-h":!0}),d(be)!=="svelte-6zjh54"&&(be.textContent=ws),Cl=n(e),ge=p(e,"OL",{"data-svelte-h":!0}),d(ge)!=="svelte-utsrgp"&&(ge.innerHTML=Js),vl=n(e),Te=p(e,"P",{"data-svelte-h":!0}),d(Te)!=="svelte-uz65rl"&&(Te.textContent=$s),xl=n(e),m(he.$$.fragment,e),Zl=n(e),we=p(e,"P",{"data-svelte-h":!0}),d(we)!=="svelte-1fjrnj0"&&(we.textContent=Us),Bl=n(e),Je=p(e,"UL",{"data-svelte-h":!0}),d(Je)!=="svelte-1oias2v"&&(Je.innerHTML=Cs),Il=n(e),m(Z.$$.fragment,e),kl=n(e),$e=p(e,"P",{"data-svelte-h":!0}),d($e)!=="svelte-j69ur5"&&($e.innerHTML=vs),_l=n(e),m(Ue.$$.fragment,e),Wl=n(e),Ce=p(e,"P",{"data-svelte-h":!0}),d(Ce)!=="svelte-1b9fj7y"&&(Ce.innerHTML=xs),Xl=n(e),m(B.$$.fragment,e),Nl=n(e),ve=p(e,"P",{"data-svelte-h":!0}),d(ve)!=="svelte-19vxzwm"&&(ve.textContent=Zs),Al=n(e),m(xe.$$.fragment,e),Gl=n(e),Ze=p(e,"P",{"data-svelte-h":!0}),d(Ze)!=="svelte-2qbtlm"&&(Ze.textContent=Bs),Rl=n(e),m(Be.$$.fragment,e),El=n(e),Ie=p(e,"P",{"data-svelte-h":!0}),d(Ie)!=="svelte-1ahh71r"&&(Ie.textContent=Is),Vl=n(e),m(ke.$$.fragment,e),Hl=n(e),_e=p(e,"P",{"data-svelte-h":!0}),d(_e)!=="svelte-nurpeo"&&(_e.innerHTML=ks),ql=n(e),m(We.$$.fragment,e),zl=n(e),m(I.$$.fragment,e),Ll=n(e),m(Xe.$$.fragment,e),Ql=n(e),Ne=p(e,"P",{"data-svelte-h":!0}),d(Ne)!=="svelte-1e9iy9f"&&(Ne.innerHTML=_s),Sl=n(e),m(Ae.$$.fragment,e),Fl=n(e),Ge=p(e,"P",{"data-svelte-h":!0}),d(Ge)!=="svelte-i9ugge"&&(Ge.innerHTML=Ws),Yl=n(e),m(Re.$$.fragment,e),Pl=n(e),m(k.$$.fragment,e),Ol=n(e),m(Ee.$$.fragment,e),Dl=n(e),Ve=p(e,"P",{"data-svelte-h":!0}),d(Ve)!=="svelte-1cws23w"&&(Ve.innerHTML=Xs),Kl=n(e),m(He.$$.fragment,e),ea=n(e),qe=p(e,"P",{"data-svelte-h":!0}),d(qe)!=="svelte-e8b61v"&&(qe.innerHTML=Ns),ta=n(e),m(ze.$$.fragment,e),la=n(e),Le=p(e,"P",{"data-svelte-h":!0}),d(Le)!=="svelte-gmawhv"&&(Le.textContent=As),aa=n(e),Qe=p(e,"UL",{"data-svelte-h":!0}),d(Qe)!=="svelte-1l017x9"&&(Qe.innerHTML=Gs),sa=n(e),Se=p(e,"P",{"data-svelte-h":!0}),d(Se)!=="svelte-5jmim9"&&(Se.innerHTML=Rs),na=n(e),m(Fe.$$.fragment,e),oa=n(e),m(_.$$.fragment,e),ia=n(e),Ye=p(e,"P",{"data-svelte-h":!0}),d(Ye)!=="svelte-jnclu5"&&(Ye.innerHTML=Es),ra=n(e),Pe=p(e,"P",{"data-svelte-h":!0}),d(Pe)!=="svelte-1tbohqs"&&(Pe.textContent=Vs),pa=n(e),Oe=p(e,"P",{"data-svelte-h":!0}),d(Oe)!=="svelte-14y3y0y"&&(Oe.textContent=Hs),da=n(e),De=p(e,"UL",{"data-svelte-h":!0}),d(De)!=="svelte-1pnqwfl"&&(De.innerHTML=qs),ca=n(e),Ke=p(e,"P",{"data-svelte-h":!0}),d(Ke)!=="svelte-1xnblp0"&&(Ke.textContent=zs),ma=n(e),m(et.$$.fragment,e),ua=n(e),tt=p(e,"P",{"data-svelte-h":!0}),d(tt)!=="svelte-oteso6"&&(tt.innerHTML=Ls),Ma=n(e),lt=p(e,"P",{"data-svelte-h":!0}),d(lt)!=="svelte-16q5iky"&&(lt.innerHTML=Qs),fa=n(e),at=p(e,"P",{"data-svelte-h":!0}),d(at)!=="svelte-1z0i5sf"&&(at.innerHTML=Ss),ya=n(e),m(st.$$.fragment,e),ja=n(e),nt=p(e,"P",{"data-svelte-h":!0}),d(nt)!=="svelte-1g52tin"&&(nt.textContent=Fs),ba=n(e),ot=p(e,"P",{"data-svelte-h":!0}),d(ot)!=="svelte-1k2z473"&&(ot.textContent=Ys),ga=n(e),it=p(e,"P",{"data-svelte-h":!0}),d(it)!=="svelte-w9fo8c"&&(it.innerHTML=Ps),Ta=n(e),rt=p(e,"P",{"data-svelte-h":!0}),d(rt)!=="svelte-d0488i"&&(rt.innerHTML=Os),ha=n(e),pt=p(e,"P",{"data-svelte-h":!0}),d(pt)!=="svelte-1udnc8x"&&(pt.textContent=Ds),wa=n(e),m(dt.$$.fragment,e),Ja=n(e),ct=p(e,"P",{"data-svelte-h":!0}),d(ct)!=="svelte-z2sk6s"&&(ct.textContent=Ks),$a=n(e),m(mt.$$.fragment,e),Ua=n(e),ut=p(e,"P",{"data-svelte-h":!0}),d(ut)!=="svelte-f2qgin"&&(ut.innerHTML=en),Ca=n(e),m(Mt.$$.fragment,e),va=n(e),m(ft.$$.fragment,e),xa=n(e),yt=p(e,"P",{"data-svelte-h":!0}),d(yt)!=="svelte-cu3t2j"&&(yt.innerHTML=tn),Za=n(e),m(jt.$$.fragment,e),Ba=n(e),m(bt.$$.fragment,e),Ia=n(e),gt=p(e,"P",{"data-svelte-h":!0}),d(gt)!=="svelte-j4u541"&&(gt.innerHTML=ln),ka=n(e),m(Tt.$$.fragment,e),_a=n(e),m(ht.$$.fragment,e),Wa=n(e),wt=p(e,"P",{"data-svelte-h":!0}),d(wt)!=="svelte-y13wnz"&&(wt.innerHTML=an),Xa=n(e),Jt=p(e,"OL",{"data-svelte-h":!0}),d(Jt)!=="svelte-j8267o"&&(Jt.innerHTML=sn),Na=n(e),m($t.$$.fragment,e),Aa=n(e),Ut=p(e,"P",{"data-svelte-h":!0}),d(Ut)!=="svelte-17gv1st"&&(Ut.innerHTML=nn),Ga=n(e),m(Ct.$$.fragment,e),Ra=n(e),vt=p(e,"P",{"data-svelte-h":!0}),d(vt)!=="svelte-xgquje"&&(vt.textContent=on),Ea=n(e),xt=p(e,"UL",{"data-svelte-h":!0}),d(xt)!=="svelte-ctgjcu"&&(xt.innerHTML=rn),Va=n(e),m(Zt.$$.fragment,e),Ha=n(e),Bt=p(e,"P",{"data-svelte-h":!0}),d(Bt)!=="svelte-rrgk4r"&&(Bt.innerHTML=pn),qa=n(e),m(It.$$.fragment,e),za=n(e),kt=p(e,"P",{"data-svelte-h":!0}),d(kt)!=="svelte-17bbjt2"&&(kt.textContent=dn),La=n(e),m(_t.$$.fragment,e),Qa=n(e),Wt=p(e,"P",{"data-svelte-h":!0}),d(Wt)!=="svelte-157z9d8"&&(Wt.textContent=cn),Sa=n(e),m(Xt.$$.fragment,e),Fa=n(e),Nt=p(e,"P",{"data-svelte-h":!0}),d(Nt)!=="svelte-nhaqqn"&&(Nt.textContent=mn),Ya=n(e),At=p(e,"P",{"data-svelte-h":!0}),d(At)!=="svelte-rtq77g"&&(At.innerHTML=un),Pa=n(e),m(Gt.$$.fragment,e),Oa=n(e),Et=p(e,"P",{}),hn(Et).forEach(l),this.h()},h(){wn(o,"name","hf:doc:metadata"),wn(o,"content",qn)},m(e,t){Zn(document.head,o),a(e,b,t),a(e,i,t),a(e,g,t),u(h,e,t),a(e,J,t),a(e,U,t),a(e,C,t),a(e,X,t),a(e,Vt,t),u(N,e,t),a(e,Ht,t),a(e,A,t),a(e,qt,t),a(e,G,t),a(e,zt,t),a(e,R,t),a(e,Lt,t),a(e,E,t),a(e,Qt,t),a(e,V,t),a(e,St,t),a(e,H,t),a(e,Ft,t),a(e,q,t),a(e,Yt,t),u(z,e,t),a(e,Pt,t),a(e,L,t),a(e,Ot,t),u(Q,e,t),a(e,Dt,t),a(e,S,t),a(e,Kt,t),u(F,e,t),a(e,el,t),a(e,Y,t),a(e,tl,t),u(P,e,t),a(e,ll,t),a(e,O,t),a(e,al,t),u(D,e,t),a(e,sl,t),a(e,K,t),a(e,nl,t),a(e,ee,t),a(e,ol,t),u(te,e,t),a(e,il,t),a(e,le,t),a(e,rl,t),u(ae,e,t),a(e,pl,t),a(e,se,t),a(e,dl,t),u(ne,e,t),a(e,cl,t),a(e,oe,t),a(e,ml,t),u(v,e,t),a(e,ul,t),u(ie,e,t),a(e,Ml,t),a(e,re,t),a(e,fl,t),a(e,pe,t),a(e,yl,t),a(e,de,t),a(e,jl,t),u(ce,e,t),a(e,bl,t),a(e,me,t),a(e,gl,t),u(ue,e,t),a(e,Tl,t),a(e,Me,t),a(e,hl,t),u(fe,e,t),a(e,wl,t),a(e,ye,t),a(e,Jl,t),u(x,e,t),a(e,$l,t),u(je,e,t),a(e,Ul,t),a(e,be,t),a(e,Cl,t),a(e,ge,t),a(e,vl,t),a(e,Te,t),a(e,xl,t),u(he,e,t),a(e,Zl,t),a(e,we,t),a(e,Bl,t),a(e,Je,t),a(e,Il,t),u(Z,e,t),a(e,kl,t),a(e,$e,t),a(e,_l,t),u(Ue,e,t),a(e,Wl,t),a(e,Ce,t),a(e,Xl,t),u(B,e,t),a(e,Nl,t),a(e,ve,t),a(e,Al,t),u(xe,e,t),a(e,Gl,t),a(e,Ze,t),a(e,Rl,t),u(Be,e,t),a(e,El,t),a(e,Ie,t),a(e,Vl,t),u(ke,e,t),a(e,Hl,t),a(e,_e,t),a(e,ql,t),u(We,e,t),a(e,zl,t),u(I,e,t),a(e,Ll,t),u(Xe,e,t),a(e,Ql,t),a(e,Ne,t),a(e,Sl,t),u(Ae,e,t),a(e,Fl,t),a(e,Ge,t),a(e,Yl,t),u(Re,e,t),a(e,Pl,t),u(k,e,t),a(e,Ol,t),u(Ee,e,t),a(e,Dl,t),a(e,Ve,t),a(e,Kl,t),u(He,e,t),a(e,ea,t),a(e,qe,t),a(e,ta,t),u(ze,e,t),a(e,la,t),a(e,Le,t),a(e,aa,t),a(e,Qe,t),a(e,sa,t),a(e,Se,t),a(e,na,t),u(Fe,e,t),a(e,oa,t),u(_,e,t),a(e,ia,t),a(e,Ye,t),a(e,ra,t),a(e,Pe,t),a(e,pa,t),a(e,Oe,t),a(e,da,t),a(e,De,t),a(e,ca,t),a(e,Ke,t),a(e,ma,t),u(et,e,t),a(e,ua,t),a(e,tt,t),a(e,Ma,t),a(e,lt,t),a(e,fa,t),a(e,at,t),a(e,ya,t),u(st,e,t),a(e,ja,t),a(e,nt,t),a(e,ba,t),a(e,ot,t),a(e,ga,t),a(e,it,t),a(e,Ta,t),a(e,rt,t),a(e,ha,t),a(e,pt,t),a(e,wa,t),u(dt,e,t),a(e,Ja,t),a(e,ct,t),a(e,$a,t),u(mt,e,t),a(e,Ua,t),a(e,ut,t),a(e,Ca,t),u(Mt,e,t),a(e,va,t),u(ft,e,t),a(e,xa,t),a(e,yt,t),a(e,Za,t),u(jt,e,t),a(e,Ba,t),u(bt,e,t),a(e,Ia,t),a(e,gt,t),a(e,ka,t),u(Tt,e,t),a(e,_a,t),u(ht,e,t),a(e,Wa,t),a(e,wt,t),a(e,Xa,t),a(e,Jt,t),a(e,Na,t),u($t,e,t),a(e,Aa,t),a(e,Ut,t),a(e,Ga,t),u(Ct,e,t),a(e,Ra,t),a(e,vt,t),a(e,Ea,t),a(e,xt,t),a(e,Va,t),u(Zt,e,t),a(e,Ha,t),a(e,Bt,t),a(e,qa,t),u(It,e,t),a(e,za,t),a(e,kt,t),a(e,La,t),u(_t,e,t),a(e,Qa,t),a(e,Wt,t),a(e,Sa,t),u(Xt,e,t),a(e,Fa,t),a(e,Nt,t),a(e,Ya,t),a(e,At,t),a(e,Pa,t),u(Gt,e,t),a(e,Oa,t),a(e,Et,t),Da=!0},p(e,[t]){const Mn={};t&2&&(Mn.$$scope={dirty:t,ctx:e}),v.$set(Mn);const fn={};t&2&&(fn.$$scope={dirty:t,ctx:e}),x.$set(fn);const yn={};t&2&&(yn.$$scope={dirty:t,ctx:e}),Z.$set(yn);const jn={};t&2&&(jn.$$scope={dirty:t,ctx:e}),B.$set(jn);const bn={};t&2&&(bn.$$scope={dirty:t,ctx:e}),I.$set(bn);const gn={};t&2&&(gn.$$scope={dirty:t,ctx:e}),k.$set(gn);const Tn={};t&2&&(Tn.$$scope={dirty:t,ctx:e}),_.$set(Tn)},i(e){Da||(M(h.$$.fragment,e),M(N.$$.fragment,e),M(z.$$.fragment,e),M(Q.$$.fragment,e),M(F.$$.fragment,e),M(P.$$.fragment,e),M(D.$$.fragment,e),M(te.$$.fragment,e),M(ae.$$.fragment,e),M(ne.$$.fragment,e),M(v.$$.fragment,e),M(ie.$$.fragment,e),M(ce.$$.fragment,e),M(ue.$$.fragment,e),M(fe.$$.fragment,e),M(x.$$.fragment,e),M(je.$$.fragment,e),M(he.$$.fragment,e),M(Z.$$.fragment,e),M(Ue.$$.fragment,e),M(B.$$.fragment,e),M(xe.$$.fragment,e),M(Be.$$.fragment,e),M(ke.$$.fragment,e),M(We.$$.fragment,e),M(I.$$.fragment,e),M(Xe.$$.fragment,e),M(Ae.$$.fragment,e),M(Re.$$.fragment,e),M(k.$$.fragment,e),M(Ee.$$.fragment,e),M(He.$$.fragment,e),M(ze.$$.fragment,e),M(Fe.$$.fragment,e),M(_.$$.fragment,e),M(et.$$.fragment,e),M(st.$$.fragment,e),M(dt.$$.fragment,e),M(mt.$$.fragment,e),M(Mt.$$.fragment,e),M(ft.$$.fragment,e),M(jt.$$.fragment,e),M(bt.$$.fragment,e),M(Tt.$$.fragment,e),M(ht.$$.fragment,e),M($t.$$.fragment,e),M(Ct.$$.fragment,e),M(Zt.$$.fragment,e),M(It.$$.fragment,e),M(_t.$$.fragment,e),M(Xt.$$.fragment,e),M(Gt.$$.fragment,e),Da=!0)},o(e){f(h.$$.fragment,e),f(N.$$.fragment,e),f(z.$$.fragment,e),f(Q.$$.fragment,e),f(F.$$.fragment,e),f(P.$$.fragment,e),f(D.$$.fragment,e),f(te.$$.fragment,e),f(ae.$$.fragment,e),f(ne.$$.fragment,e),f(v.$$.fragment,e),f(ie.$$.fragment,e),f(ce.$$.fragment,e),f(ue.$$.fragment,e),f(fe.$$.fragment,e),f(x.$$.fragment,e),f(je.$$.fragment,e),f(he.$$.fragment,e),f(Z.$$.fragment,e),f(Ue.$$.fragment,e),f(B.$$.fragment,e),f(xe.$$.fragment,e),f(Be.$$.fragment,e),f(ke.$$.fragment,e),f(We.$$.fragment,e),f(I.$$.fragment,e),f(Xe.$$.fragment,e),f(Ae.$$.fragment,e),f(Re.$$.fragment,e),f(k.$$.fragment,e),f(Ee.$$.fragment,e),f(He.$$.fragment,e),f(ze.$$.fragment,e),f(Fe.$$.fragment,e),f(_.$$.fragment,e),f(et.$$.fragment,e),f(st.$$.fragment,e),f(dt.$$.fragment,e),f(mt.$$.fragment,e),f(Mt.$$.fragment,e),f(ft.$$.fragment,e),f(jt.$$.fragment,e),f(bt.$$.fragment,e),f(Tt.$$.fragment,e),f(ht.$$.fragment,e),f($t.$$.fragment,e),f(Ct.$$.fragment,e),f(Zt.$$.fragment,e),f(It.$$.fragment,e),f(_t.$$.fragment,e),f(Xt.$$.fragment,e),f(Gt.$$.fragment,e),Da=!1},d(e){e&&(l(b),l(i),l(g),l(J),l(U),l(C),l(X),l(Vt),l(Ht),l(A),l(qt),l(G),l(zt),l(R),l(Lt),l(E),l(Qt),l(V),l(St),l(H),l(Ft),l(q),l(Yt),l(Pt),l(L),l(Ot),l(Dt),l(S),l(Kt),l(el),l(Y),l(tl),l(ll),l(O),l(al),l(sl),l(K),l(nl),l(ee),l(ol),l(il),l(le),l(rl),l(pl),l(se),l(dl),l(cl),l(oe),l(ml),l(ul),l(Ml),l(re),l(fl),l(pe),l(yl),l(de),l(jl),l(bl),l(me),l(gl),l(Tl),l(Me),l(hl),l(wl),l(ye),l(Jl),l($l),l(Ul),l(be),l(Cl),l(ge),l(vl),l(Te),l(xl),l(Zl),l(we),l(Bl),l(Je),l(Il),l(kl),l($e),l(_l),l(Wl),l(Ce),l(Xl),l(Nl),l(ve),l(Al),l(Gl),l(Ze),l(Rl),l(El),l(Ie),l(Vl),l(Hl),l(_e),l(ql),l(zl),l(Ll),l(Ql),l(Ne),l(Sl),l(Fl),l(Ge),l(Yl),l(Pl),l(Ol),l(Dl),l(Ve),l(Kl),l(ea),l(qe),l(ta),l(la),l(Le),l(aa),l(Qe),l(sa),l(Se),l(na),l(oa),l(ia),l(Ye),l(ra),l(Pe),l(pa),l(Oe),l(da),l(De),l(ca),l(Ke),l(ma),l(ua),l(tt),l(Ma),l(lt),l(fa),l(at),l(ya),l(ja),l(nt),l(ba),l(ot),l(ga),l(it),l(Ta),l(rt),l(ha),l(pt),l(wa),l(Ja),l(ct),l($a),l(Ua),l(ut),l(Ca),l(va),l(xa),l(yt),l(Za),l(Ba),l(Ia),l(gt),l(ka),l(_a),l(Wa),l(wt),l(Xa),l(Jt),l(Na),l(Aa),l(Ut),l(Ga),l(Ra),l(vt),l(Ea),l(xt),l(Va),l(Ha),l(Bt),l(qa),l(za),l(kt),l(La),l(Qa),l(Wt),l(Sa),l(Fa),l(Nt),l(Ya),l(At),l(Pa),l(Oa),l(Et)),l(o),y(h,e),y(N,e),y(z,e),y(Q,e),y(F,e),y(P,e),y(D,e),y(te,e),y(ae,e),y(ne,e),y(v,e),y(ie,e),y(ce,e),y(ue,e),y(fe,e),y(x,e),y(je,e),y(he,e),y(Z,e),y(Ue,e),y(B,e),y(xe,e),y(Be,e),y(ke,e),y(We,e),y(I,e),y(Xe,e),y(Ae,e),y(Re,e),y(k,e),y(Ee,e),y(He,e),y(ze,e),y(Fe,e),y(_,e),y(et,e),y(st,e),y(dt,e),y(mt,e),y(Mt,e),y(ft,e),y(jt,e),y(bt,e),y(Tt,e),y(ht,e),y($t,e),y(Ct,e),y(Zt,e),y(It,e),y(_t,e),y(Xt,e),y(Gt,e)}}}const qn='{"title":"Exportar modelos 🤗 Transformers","local":"exportar-modelos--transformers","sections":[{"title":"ONNX","local":"onnx","sections":[{"title":"Exportar un model a ONNX","local":"exportar-un-model-a-onnx","sections":[],"depth":3},{"title":"Seleccionar características para diferentes topologías de un modelo","local":"seleccionar-características-para-diferentes-topologías-de-un-modelo","sections":[],"depth":3},{"title":"Exportar un modelo para una arquitectura no compatible","local":"exportar-un-modelo-para-una-arquitectura-no-compatible","sections":[{"title":"Implementar una configuración personalizada en ONNX","local":"implementar-una-configuración-personalizada-en-onnx","sections":[],"depth":4},{"title":"Exportar el modelo","local":"exportar-el-modelo","sections":[],"depth":4},{"title":"Validar los resultados del modelo","local":"validar-los-resultados-del-modelo","sections":[],"depth":4}],"depth":3},{"title":"Contribuir con una nueva configuración a 🤗 Transformers","local":"contribuir-con-una-nueva-configuración-a--transformers","sections":[],"depth":3}],"depth":2},{"title":"TorchScript","local":"torchscript","sections":[{"title":"Indicador de TorchScript y pesos atados","local":"indicador-de-torchscript-y-pesos-atados","sections":[],"depth":3},{"title":"Entradas ficticias y longitudes estándar","local":"entradas-ficticias-y-longitudes-estándar","sections":[],"depth":3},{"title":"Usar TorchScript en Python","local":"usar-torchscript-en-python","sections":[{"title":"Guardando un modelo","local":"guardando-un-modelo","sections":[],"depth":4},{"title":"Cargar un modelo","local":"cargar-un-modelo","sections":[],"depth":4},{"title":"Usar un modelo rastreado para la inferencia","local":"usar-un-modelo-rastreado-para-la-inferencia","sections":[],"depth":4}],"depth":3},{"title":"Implementar los modelos HuggingFace TorchScript en AWS mediante Neuron SDK","local":"implementar-los-modelos-huggingface-torchscript-en-aws-mediante-neuron-sdk","sections":[{"title":"Implicaciones","local":"implicaciones","sections":[],"depth":4},{"title":"Dependencias","local":"dependencias","sections":[],"depth":4},{"title":"Convertir un modelo a AWS Neuron","local":"convertir-un-modelo-a-aws-neuron","sections":[],"depth":4}],"depth":3}],"depth":2}],"depth":1}';function zn(w){return Un(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class On extends Cn{constructor(o){super(),vn(this,o,zn,Hn,$n,{})}}export{On as component}; | |
Xet Storage Details
- Size:
- 77.8 kB
- Xet hash:
- 47991b36ac2032d5af0b23e59c6a988d753241b03408413ca8ff2878cf973f0f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.