diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..fcf1e6b3 --- /dev/null +++ b/404.html @@ -0,0 +1,973 @@ + + + + + + + + + + + + + + + + + + + + + NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..0713cc29 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +www.jetson-ai-lab.com diff --git a/assets/80s-pop.wav b/assets/80s-pop.wav new file mode 100644 index 00000000..30606cb7 Binary files /dev/null and b/assets/80s-pop.wav differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.220ee61c.min.js b/assets/javascripts/bundle.220ee61c.min.js new file mode 100644 index 00000000..116072a1 --- /dev/null +++ b/assets/javascripts/bundle.220ee61c.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ci=Object.create;var gr=Object.defineProperty;var Ri=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Hi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,nn=Object.prototype.propertyIsEnumerable;var rn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&rn(e,r,t[r]);if(Ht)for(var r of Ht(t))nn.call(t,r)&&rn(e,r,t[r]);return e};var on=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&nn.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Pi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ki(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=Ri(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ci(Hi(e)):{},Pi(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var sn=Pt((xr,an)=>{(function(e,t){typeof xr=="object"&&typeof an!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(O){return!!(O&&O!==document&&O.nodeName!=="HTML"&&O.nodeName!=="BODY"&&"classList"in O&&"contains"in O.classList)}function f(O){var Qe=O.type,De=O.tagName;return!!(De==="INPUT"&&s[Qe]&&!O.readOnly||De==="TEXTAREA"&&!O.readOnly||O.isContentEditable)}function c(O){O.classList.contains("focus-visible")||(O.classList.add("focus-visible"),O.setAttribute("data-focus-visible-added",""))}function u(O){O.hasAttribute("data-focus-visible-added")&&(O.classList.remove("focus-visible"),O.removeAttribute("data-focus-visible-added"))}function p(O){O.metaKey||O.altKey||O.ctrlKey||(a(r.activeElement)&&c(r.activeElement),n=!0)}function m(O){n=!1}function d(O){a(O.target)&&(n||f(O.target))&&c(O.target)}function h(O){a(O.target)&&(O.target.classList.contains("focus-visible")||O.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(O.target))}function v(O){document.visibilityState==="hidden"&&(o&&(n=!0),Y())}function Y(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function B(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(O){O.target.nodeName&&O.target.nodeName.toLowerCase()==="html"||(n=!1,B())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),Y(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var cn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},s=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(B,N){d.append(N,B)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(O){throw new Error("URL unable to set base "+c+" due to "+O)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,Y=!0,B=this;["append","delete","set"].forEach(function(O){var Qe=h[O];h[O]=function(){Qe.apply(h,arguments),v&&(Y=!1,B.search=h.toString(),Y=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,Y&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(f){Object.defineProperty(s,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){a(f)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var qr=Pt((Mt,Nr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof Nr=="object"?Nr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ai}});var s=i(279),a=i.n(s),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(T){return!1}}var d=function(T){var E=p()(T);return m("cut"),E},h=d;function v(j){var T=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[T?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var Y=function(T,E){var H=v(T);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},B=function(T){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof T=="string"?H=Y(T,E):T instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(T==null?void 0:T.type)?H=Y(T.value,E):(H=p()(T),m("copy")),H},N=B;function O(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?O=function(E){return typeof E}:O=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},O(j)}var Qe=function(){var T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=T.action,H=E===void 0?"copy":E,I=T.container,q=T.target,Me=T.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&O(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function Ei(j,T){if(!(j instanceof T))throw new TypeError("Cannot call a class as a function")}function tn(j,T){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=c()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ai=Li},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,f){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(f))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return c(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),s=f.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var f=this;function c(){f.off(i,c),s.apply(a,arguments)}return c._=s,this.on(i,c,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=a.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var rs=/["'&<>]/;Yo.exports=ns;function ns(e){var t=""+e,r=rs.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof et?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function pn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,f){s=e[i](s),o(a,f,s.done,s.value)})}}function o(i,s,a,f){Promise.resolve(f).then(function(c){i({value:c,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),f=a.next();!f.done;f=a.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{ln(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)ln(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function ln(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new xn(r,n)},t}(F);var xn=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,f=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Sn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Oe=new Sn(wn);var M=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Te(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function zi(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=zi();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return un(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return Ni(e);if(pt(e))return qi(e);if(Nt(e))return Ki(e);if(Kt(e))return On(e);if(Gt(e))return Qi(e);if(Jt(e))return Yi(e)}throw Qt(e)}function Ni(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function qi(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Dn(function(){return new Zt}))}}function Vn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,f=a===void 0?!0:a;return function(c){var u,p,m,d=0,h=!1,v=!1,Y=function(){p==null||p.unsubscribe(),p=void 0},B=function(){Y(),u=m=void 0,h=v=!1},N=function(){var O=u;B(),O==null||O.unsubscribe()};return y(function(O,Qe){d++,!v&&!h&&Y();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,f))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,Y(),p=$r(B,o,$e),De.error($e)},complete:function(){h=!0,Y(),p=$r(B,s),De.complete()}}),U(O).subscribe(u))})(c)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),J())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Kn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Oe),l(()=>rr(e)),V(rr(e)))}var Yn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Wr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),va?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Wr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ba.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Gn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Jn=typeof WeakMap!="undefined"?new WeakMap:new Yn,Xn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ga.getInstance(),n=new La(t,r,this);Jn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Xn.prototype[e]=function(){var t;return(t=Jn.get(this))[e].apply(t,arguments)}});var Aa=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Xn}(),Zn=Aa;var eo=new x,Ca=$(()=>k(new Zn(e=>{for(let t of e)eo.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ca.pipe(S(t=>t.observe(e)),g(t=>eo.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var to=new x,Ra=$(()=>k(new IntersectionObserver(e=>{for(let t of e)to.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),X(1));function sr(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function ro(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),J())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function no(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function ka(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ha(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function oo(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:no("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!ka(n,r)}return!0}),pe());return Ha().pipe(g(t=>t?M:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function io(){return new x}function ao(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)ao(e,r)}function _(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)ao(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function so(){return location.hash.substring(1)}function Dr(e){let t=_("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Pa(e){return L(b(window,"hashchange"),e).pipe(l(so),V(so()),A(t=>t.length>0),X(1))}function co(e){return Pa(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function Vr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function fo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function zr(e,t){return e.pipe(g(r=>r?t():M))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>M),g(r=>r.status!==200?Ot(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),X(1))}function uo(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),X(1))}function pr(e){let t=_("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function po(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function lo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(po),V(po()))}function mo(){return{width:innerWidth,height:innerHeight}}function ho(){return b(window,"resize",{passive:!0}).pipe(l(mo),V(mo()))}function bo(){return G([lo(),ho()]).pipe(l(([e,t])=>({offset:e,size:t})),X(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(ee("size")),o=G([n,r]).pipe(l(()=>Xe(e)));return G([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:f,y:c}])=>({offset:{x:s.x-f,y:s.y-c+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,f,c)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:f,error:c});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Benchmarks

+

LLM

+ + +

For running LLM benchmarks, see the MLC container documentation.

+

VLM

+ + +

For running VLM benchmarks, see the MLC and MiniGPT-4 container documentation.

+

ViT

+ + +

VIT performance data from [1] [2] [3]

+

Stable Diffusion

+ + +

Riva

+ + +

For running Riva benchmarks, see ASR Performance and TTS Performance.

+

Vector Database

+ + +

For running vector database benchmarks, see the NanoDB container documentation.

+ + + + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/buy.md.bak b/buy.md.bak new file mode 100644 index 00000000..e4d72ec1 --- /dev/null +++ b/buy.md.bak @@ -0,0 +1,21 @@ +--- +hide: + - navigation + - toc +--- + +# Buy + +Get your Jetson developer kit to try generative AIs in your own local environment. + +!!! note + + The availablility and the price of Jetson developer kits vary depending on your region.
Please click "Jetson Store" button to find out the availability on the page next. + + +| | Product | Action | +|-|-|-| +| |
Jetson AGX Orin 64GB Developer Kit
  • AI Perf: 275 TOPS
  • GPU: NVIDIA Ampere architecture with 2048 NVIDIA CUDA cores and 64 tensor cores
  • CPU: 12-core Arm Cortex-A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3
  • Memory: 64GB 256-bit LPDDR5 | 204.8 GB/s
  • Storage: 64GB eMMC 5.1
| Jetson Store | +| |
Jetson AGX Orin Developer Kit
  • AI Perf: 275 TOPS
  • GPU: NVIDIA Ampere architecture with 2048 NVIDIA CUDA cores and 64 tensor cores
  • CPU: 12-core Arm Cortex-A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3
  • Memory: 32GB 256-bit LPDDR5 | 204.8 GB/s
  • Storage: 64GB eMMC 5.1
| Jetson Store | +| |
Jetson Orin Nano Developer Kit
  • AI Perf: 40 TOPS
  • GPU: 1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores
  • CPU: 6-core Arm® Cortex®-A78AE v8.2 64-bit CPU 1.5MB L2 + 4MB L3
  • Memory: 8GB 128-bit LPDDR5 68 GB/s
  • Storage: SD Card Slot & external NVMe via M.2 Key M
| Jetson Store | + diff --git a/community_articles.html b/community_articles.html new file mode 100644 index 00000000..c0f77662 --- /dev/null +++ b/community_articles.html @@ -0,0 +1,1281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Community Articles - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + +

Community Articles

+

Below, you'll find a collection of community articles showcasing the implementation of generative AI on the Jetson platform.

+

JetsonHacks Jetson AI Labs – Generative AI Playground (10-31-2023)

+

JetsonHacks publishes an insightful video that walks developers through the typical steps for running generative AI models on Jetson following this site's tutorials. The video shows the interaction with the LLaVA model.

+ + +

Hackster Vision2Audio - Giving the blind an understanding through AI (10-15-2023)

+

Nurgaliyev Shakhizat demonstrates Vision2Audio running on Jetson AGX Orin 64GB Developer Kit to harness the power of LLaVA to help visually impaired people.

+

+

NVIDIA Bringing Generative AI to Life with NVIDIA Jetson (10-19-2023)

+

Follow this walkthrough of the Jetson AI Lab tutorials along with coverage of the latest features and advances coming to JetPack 6 and beyond:

+ + +
+

  https://developer.nvidia.com/blog/bringing-generative-ai-to-life-with-jetson/

+
+

Medium How to set up your Jetson device for LLM inference and fine-tuning (10-02-2023)

+

Michael Yuan's guide demonstrating how to set up the Jetson AGX Orin 64GB Developer Kit specifically for large language model (LLM) inference, highlighting the crucial role of GPUs and the cost-effectiveness of the Jetson AGX Orin for LLM tasks.

+
+

  https://medium.com/@michaelyuan_88928/how-to-set-up-your-jetson-device-for-llm-inference-and-fine-tuning-682e36444d43

+
+

Hackster Getting Started with AI on Nvidia Jetson AGX Orin Dev Kit (09-16-2023)

+

Nurgaliyev Shakhizat demonstrates llamaspeak on Jetson AGX Orin 64GB Developer Kit.

+

+
+

  https://www.hackster.io/shahizat/getting-started-with-ai-on-nvidia-jetson-agx-orin-dev-kit-5a55b5

+
+

Hackster New AI Tool Is Generating a Lot of Buzz (09-13-2023)

+

Nick Bild provides an insightful introduction to the Jetson Generative AI Playground.

+
+

  https://www.hackster.io/news/new-ai-tool-is-generating-a-lot-of-buzz-3cc5f23a3598

+
+

JetsonHacks Use These! Jetson Docker Containers Tutorial (09-04-2023)

+

JetsonHacks has a in-depth tutorial on how to use jetson-containers and even show text-generation-webui and stable-diffusion-webui containers in action!

+ + +
+

  https://jetsonhacks.com/2023/09/04/use-these-jetson-docker-containers-tutorial/

+
+

Hackster LLaMa 2 LLMs w/ NVIDIA Jetson and textgeneration-web-ui (08-17-2023)

+

Paul DeCarlo demonstrates 13B and 70B parameter LLama 2 models running locally on Jetson AGX Orin 64GB Developer Kit.

+

+
+

  https://www.hackster.io/pjdecarlo/llama-2-llms-w-nvidia-jetson-and-textgeneration-web-ui-96b070

+
+

Hackster Running a ChatGPT-Like LLM-LLaMA2 on a Nvidia Jetson Cluster (08-14-2023)

+

Discover how to run a LLaMA-2 7B model on an NVIDIA Jetson cluster in this insightful tutorial by Nurgaliyev Shakhizat.

+

+
+

  https://www.hackster.io/shahizat/running-a-chatgpt-like-llm-llama2-on-a-nvidia-jetson-cluster-cbc7d4

+
+

JetsonHacks Speech AI on NVIDIA Jetson Tutorial (08-07-2023)

+

JetsonHacks gives a nice introduction to NVIDIA RIVA SDK and demonstrate its automated speech recognition (ASR) capability on Jetson Orin Nano Developer Kit.

+ + +
+

  https://jetsonhacks.com/2023/08/07/speech-ai-on-nvidia-jetson-tutorial/

+
+

Hackster LLM based Multimodal AI w/ Azure Open AI & NVIDIA Jetson (07-12-2023)

+

Learn how to harness the power of Multimodal AI by running Microsoft JARVIS on an Jetson AGX Orin 64GB Developer Kit, enabling a wide range of AI tasks with ChatGPT-like capabilities, image generation, and more, in this comprehensive guide by Paul DeCarlo.

+

+
+

  https://www.hackster.io/pjdecarlo/llm-based-multimodal-ai-w-azure-open-ai-nvidia-jetson-135ff2

+
+

Hackster How to Run a ChatGPT-Like LLM on NVIDIA Jetson board (06-13-2023)

+

Nurgaliyev Shakhizat explores voice AI assistant on Jetson using FastChat and VoskAPI.

+

+
+

  https://www.hackster.io/shahizat/how-to-run-a-chatgpt-like-llm-on-nvidia-jetson-board-41fd79

+
+ + + + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/css/colors.css b/css/colors.css new file mode 100644 index 00000000..18e7dc12 --- /dev/null +++ b/css/colors.css @@ -0,0 +1,276 @@ +[data-md-color-scheme="playful-purple"] { + + --md-accent-fg-color--rgb: 177, 43, 255; /* #b12bff */ + --md-accent-fg-color--hsl: 278, 100%, 58%; + --md-accent-fg-color: hsl(var(--md-accent-fg-color--hsl)); + + --md-accent-fg-color--dark-hsl: 278, 100%, 51%; + --md-accent-fg-color--dark: hsl(var(--md-accent-fg-color--dark-hsl)); + + --md-accent-fg-color--light-rgb: 214, 143, 255; /* D68FFF */ + --md-accent-fg-color--light-hsl: 278, 100%, 78%; + --md-accent-fg-color--light: hsla(var(--md-accent-fg-color--light-hsl), 1.0); + + --md-accent-bg-color--rgb: 255, 255, 255; /* #ffffff */ + --md-accent-bg-color: rgb(var(--md-accent-bg-color--rgb)); + + --md-primary-fg-color: hsl(210, 100%, 40%); + --md-primary-fg-color--light: hsl(210, 100%, 50%); + --md-primary-fg-color--dark: hsl(210, 100%, 20%); + + --md-mermaid-node-bg-color: #e3f5c5; + --md-mermaid-node-fg-color: #518000; + --md-default-fg-color--lightest: #f9fff2; +} + +a.nv-buy-link,.load-buy-link { + text-decoration: none; + background-color: #76b900; + color: #000; + border: none; + cursor: pointer; + line-height: 24px; + font-family: Arial,Helvetica,Sans-Serif!important; + transition: all .2s ease-out; + cursor: pointer; + display: inline-block; + font-weight: 700; + font-size: 1.2em; + padding: .625em 2em; +} + +a.nv-buy-link:hover,.load-buy-link:hover { + background-color: #91c733; + color: #000; +} + +.specs-container { + margin-top: 0.6rem; +} + +.specs-container li { + list-style: none; + margin-left: 0!important; + padding: 0!important; +} + +.specs-container ul { + padding: 0; + margin: 0 +} + +.specs { + font-weight: 400; + background: url(https://store.nvidia.com/jetson/store/UL-icon.d0c461d7202592cb.svg); + background-repeat: no-repeat; + background-position: 0 8px; + padding-left: 18px; + padding-bottom: 10px; + font-size: 16px +} + +[data-md-color-scheme="nvgreen"] { + + --md-primary-fg-color: #76B900; + --md-primary-fg-color--light: #C5E1A5; + --md-primary-fg-color--dark: #518000; + --md-accent-fg-color: #004D40; + + --md-mermaid-node-bg-color: #e3f5c5; + --md-mermaid-node-fg-color: #518000; + --md-default-fg-color--lightest: #f9fff2; +} + +[data-md-color-scheme="slate"] { + + --md-primary-fg-color: #76B900; + --md-primary-fg-color--light: #C5E1A5; + --md-primary-fg-color--dark: #518000; + --md-accent-fg-color: #a2ff00; + + --md-mermaid-node-bg-color: #518000; + --md-mermaid-node-fg-color: #e3f5c5; + --md-default-fg-color--lightest: #384e4c; + + --md-hue: 210; + } + +.numberCircle { + + font: Arial, sans-serif; + + width: 1.5em; + height: 1.5em; + box-sizing: initial; + + display: inline-block; + + background: #76B900; + color: #FFFFFF; + text-align: center; + border-radius: 100%; + + line-height: 1.5em; + box-sizing: content-box; +} + + +.roundSquare { + + font: Arial, sans-serif; + + height: 1.25em; + box-sizing: initial; + + display: inline-block; + + background: #004D40; + border: 0.1em solid #CCCCCC; + color: #FFFFFF; + text-align: center; + border-radius: 0.5em; + + line-height: 1.25em; + box-sizing: content-box; + + padding: 0.2em + +} + +.blobDarkGreen1 { + background: #0066467f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobDarkGreen2 { + background: #0085697f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobDarkGreen3 { + background: #00a48f7f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobDarkGreen4 { + background: #00c5b97f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobDarkGreen5 { + background: #00e6e67f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} + +.blobLightGreen1 { + background: #76b9007f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobLightGreen2 { + background: #7fc33a7f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobLightGreen3 { + background: #95d6767f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobLightGreen4 { + background: #b1e8a97f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobLightGreen5 { + background: #d5f8d87f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} + +.blobPink1 { + background: #ec84d07f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobPink2 { + background: #fe8fbe7f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em +} +.blobPink3 { + background: #ff9fb27f; border-radius: 0.5em; padding: 0.2em; margin: 0.2em; +} + +.blobJetsonHacks { + background: #394657; color: #fff; font-size: 0.8em; border-radius: 0.1em; padding-left: 0.3em; padding-right: 0.3em; margin: 0.2em; +} + +.blobHackster { + background: #2e9fe6; color: #fff; font-size: 0.8em; border-radius: 0.1em; padding-left: 0.3em; padding-right: 0.3em; margin: 0.2em; +} + +.blobMedium { + background: #292929; color: #fff; font-size: 0.8em; border-radius: 0.1em; padding-left: 0.3em; padding-right: 0.3em; margin: 0.2em; +} + +.blobNvidia { + background: #76b900; color: #fff; font-size: 0.8em; border-radius: 0.1em; padding-left: 0.3em; padding-right: 0.3em; margin: 0.2em; +} + +.highlightYellow { + background: #ffc105; + border-radius: 0.5em; + padding: 0.2em +} + +.highlightGreen { + background: #00c753; + border-radius: 0.5em; + padding: 0.2em +} + +.highlightGray { + background: #DDDDDD; + border-radius: 0.5em; + padding: 0.2em; + color: #333333; +} + +.center50 { + display: block; + margin-left: auto; + margin-right: auto; + width: 50%; +} + +.right { + clear: none; + float: right; + width: 50%; + padding: 0rem 0.5rem 0rem 0.5rem ; +} + +.left { + clear: none; + float: left; + width: 50%; + padding: 0rem 0.5rem 0rem 0.5rem ; +} + +.right40 { + clear: none; + float: right; + width: 40%; + padding: 0rem 0.5rem 0rem 1.5rem ; +} + +.left40 { + clear: none; + float: left; + width: 40%; + padding: 0rem 1.5rem 0rem 0.5rem ; +} + +.dmark { + position: relative; + display: inline-block; + border-bottom: 1px dotted black; +} + +.dmark .dmarkpopup { + visibility: hidden; + width: 400px; + background-color: #DDDDDD; + color: #fff; + text-align: center; + border-radius: 12px; + padding: 15px; + margin: 5px; + box-shadow: 5px 5px 15px #004D40; + position: absolute; + z-index: 1; +} + +.dmark:hover .dmarkpopup { + visibility: visible; +} + +.md-footer__inner { display: none } diff --git a/css/extra.css b/css/extra.css new file mode 100644 index 00000000..35dbedd2 --- /dev/null +++ b/css/extra.css @@ -0,0 +1,39 @@ +.md-header { + background: linear-gradient(90deg, #004B96 0%,hsl(132, 100%, 92%) 66%, #76b900 100%); + /* color: black; */ +} + +.md-tabs { + background: linear-gradient(90deg, #004B96 0%,hsl(132, 100%, 92%) 66%, #76b900 100%) + #DDDDDD; + background-blend-mode: multiply; + transition: background-color 500ms linear; + color: white; + font-weight: bold; +} + +.md-tabs.topped { + background: linear-gradient(90deg, #004B96 0%,hsl(132, 100%, 92%) 66%, #76b900 100%); + transition: background-color 500ms linear; + color: black; + font-weight: bold; +} + +.md-nav__link--active { + font-weight: 900; +} + +/* Bigger width for md-content for main text */ +.md-grid { + max-width: 90%; /* or 100%, if you want to stretch to full-width */ + } + +.md-banner__inner { + font-size: .7rem; + margin: 0.2rem auto; + margin-top: 0.2rem; + margin-right: auto; + margin-bottom: 0.2rem; + margin-left: auto; + padding: 0 0.8rem; +} diff --git a/getting-started.html b/getting-started.html new file mode 100644 index 00000000..fada5098 --- /dev/null +++ b/getting-started.html @@ -0,0 +1,990 @@ + + + + + + + + + + + + + + + + + + + + + Getting started - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Getting started

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/images/Chrome_ERR_CERT.png b/images/Chrome_ERR_CERT.png new file mode 100644 index 00000000..81d1841c Binary files /dev/null and b/images/Chrome_ERR_CERT.png differ diff --git a/images/Chrome_ERR_CERT_after_advanced.png b/images/Chrome_ERR_CERT_after_advanced.png new file mode 100644 index 00000000..9cc776a7 Binary files /dev/null and b/images/Chrome_ERR_CERT_after_advanced.png differ diff --git a/images/JON-with-Gcube.png b/images/JON-with-Gcube.png new file mode 100644 index 00000000..590f3b1f Binary files /dev/null and b/images/JON-with-Gcube.png differ diff --git a/images/JON_Gen-AI-panels.png b/images/JON_Gen-AI-panels.png new file mode 100644 index 00000000..498dd306 Binary files /dev/null and b/images/JON_Gen-AI-panels.png differ diff --git a/images/JON_Gen-AI-panels_1024px.jpg b/images/JON_Gen-AI-panels_1024px.jpg new file mode 100644 index 00000000..30458936 Binary files /dev/null and b/images/JON_Gen-AI-panels_1024px.jpg differ diff --git a/images/JON_Gen-AI-panels_1024px.png b/images/JON_Gen-AI-panels_1024px.png new file mode 100644 index 00000000..58251f72 Binary files /dev/null and b/images/JON_Gen-AI-panels_1024px.png differ diff --git a/images/NVIDIA-JetsonOrin-3QTR-Front-Left_800px.png b/images/NVIDIA-JetsonOrin-3QTR-Front-Left_800px.png new file mode 100644 index 00000000..ad9930cd Binary files /dev/null and b/images/NVIDIA-JetsonOrin-3QTR-Front-Left_800px.png differ diff --git a/images/TAM_15s_1080p.mp4 b/images/TAM_15s_1080p.mp4 new file mode 100644 index 00000000..671caa58 Binary files /dev/null and b/images/TAM_15s_1080p.mp4 differ diff --git a/images/TAM_screencast_cat_720p-80pcnt.mp4 b/images/TAM_screencast_cat_720p-80pcnt.mp4 new file mode 100644 index 00000000..bc67c630 Binary files /dev/null and b/images/TAM_screencast_cat_720p-80pcnt.mp4 differ diff --git a/images/TAM_screenshot.png b/images/TAM_screenshot.png new file mode 100644 index 00000000..2f378730 Binary files /dev/null and b/images/TAM_screenshot.png differ diff --git a/images/TAM_screenshot_cat.png b/images/TAM_screenshot_cat.png new file mode 100644 index 00000000..2c35f3f2 Binary files /dev/null and b/images/TAM_screenshot_cat.png differ diff --git a/images/audiocraft_jupyterlab_demo.png b/images/audiocraft_jupyterlab_demo.png new file mode 100644 index 00000000..a585641b Binary files /dev/null and b/images/audiocraft_jupyterlab_demo.png differ diff --git a/images/cube_black.png b/images/cube_black.png new file mode 100644 index 00000000..5e5ed000 Binary files /dev/null and b/images/cube_black.png differ diff --git a/images/cube_green.png b/images/cube_green.png new file mode 100644 index 00000000..d2627f4d Binary files /dev/null and b/images/cube_green.png differ diff --git a/images/cube_white.png b/images/cube_white.png new file mode 100644 index 00000000..c8ed7148 Binary files /dev/null and b/images/cube_white.png differ diff --git a/images/efficientvit_sam_demo.png b/images/efficientvit_sam_demo.png new file mode 100644 index 00000000..fbd0c71d Binary files /dev/null and b/images/efficientvit_sam_demo.png differ diff --git a/images/favicon.ico b/images/favicon.ico new file mode 100644 index 00000000..424df872 Binary files /dev/null and b/images/favicon.ico differ diff --git a/images/favicon_black.png b/images/favicon_black.png new file mode 100644 index 00000000..84d37802 Binary files /dev/null and b/images/favicon_black.png differ diff --git a/images/favicon_darkbluebg.png b/images/favicon_darkbluebg.png new file mode 100644 index 00000000..c11099a7 Binary files /dev/null and b/images/favicon_darkbluebg.png differ diff --git a/images/favicon_darkgreen.png b/images/favicon_darkgreen.png new file mode 100644 index 00000000..5bc77934 Binary files /dev/null and b/images/favicon_darkgreen.png differ diff --git a/images/favicon_darkgreenbg.png b/images/favicon_darkgreenbg.png new file mode 100644 index 00000000..beefc9e8 Binary files /dev/null and b/images/favicon_darkgreenbg.png differ diff --git a/images/favicon_navy.png b/images/favicon_navy.png new file mode 100644 index 00000000..fe0e2034 Binary files /dev/null and b/images/favicon_navy.png differ diff --git a/images/graph_llm-text-generation.png b/images/graph_llm-text-generation.png new file mode 100644 index 00000000..41153cc5 Binary files /dev/null and b/images/graph_llm-text-generation.png differ diff --git a/images/graph_llm-text-generation.svg b/images/graph_llm-text-generation.svg new file mode 100644 index 00000000..78ab495b --- /dev/null +++ b/images/graph_llm-text-generation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/graph_vit-vision-transformers.svg b/images/graph_vit-vision-transformers.svg new file mode 100644 index 00000000..0daa5681 --- /dev/null +++ b/images/graph_vit-vision-transformers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/graph_vlm-text-generation.svg b/images/graph_vlm-text-generation.svg new file mode 100644 index 00000000..458fa380 --- /dev/null +++ b/images/graph_vlm-text-generation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icon_NanoDB_512px.png b/images/icon_NanoDB_512px.png new file mode 100644 index 00000000..505b6d09 Binary files /dev/null and b/images/icon_NanoDB_512px.png differ diff --git a/images/icon_NanoSAM.png b/images/icon_NanoSAM.png new file mode 100644 index 00000000..e9240b8d Binary files /dev/null and b/images/icon_NanoSAM.png differ diff --git a/images/icon_NanoSAM_512px.jpg b/images/icon_NanoSAM_512px.jpg new file mode 100644 index 00000000..19ab6d48 Binary files /dev/null and b/images/icon_NanoSAM_512px.jpg differ diff --git a/images/icon_NanoSAM_512px.png b/images/icon_NanoSAM_512px.png new file mode 100644 index 00000000..335f97fb Binary files /dev/null and b/images/icon_NanoSAM_512px.png differ diff --git a/images/icon_diffusion.png b/images/icon_diffusion.png new file mode 100644 index 00000000..f9cb33e6 Binary files /dev/null and b/images/icon_diffusion.png differ diff --git a/images/icon_diffusion_512px.jpg b/images/icon_diffusion_512px.jpg new file mode 100644 index 00000000..07b1d1df Binary files /dev/null and b/images/icon_diffusion_512px.jpg differ diff --git a/images/icon_diffusion_512px.png b/images/icon_diffusion_512px.png new file mode 100644 index 00000000..2c3dc683 Binary files /dev/null and b/images/icon_diffusion_512px.png differ diff --git a/images/icon_distillation.png b/images/icon_distillation.png new file mode 100644 index 00000000..6051b62e Binary files /dev/null and b/images/icon_distillation.png differ diff --git a/images/icon_text-generation_512px.jpg b/images/icon_text-generation_512px.jpg new file mode 100644 index 00000000..934b3c9d Binary files /dev/null and b/images/icon_text-generation_512px.jpg differ diff --git a/images/icon_text-generation_512px.png b/images/icon_text-generation_512px.png new file mode 100644 index 00000000..1435ac81 Binary files /dev/null and b/images/icon_text-generation_512px.png differ diff --git a/images/icon_text-generation_iso.png b/images/icon_text-generation_iso.png new file mode 100644 index 00000000..2458ec87 Binary files /dev/null and b/images/icon_text-generation_iso.png differ diff --git a/images/icon_vision-language-model.png b/images/icon_vision-language-model.png new file mode 100644 index 00000000..23a60e2d Binary files /dev/null and b/images/icon_vision-language-model.png differ diff --git a/images/icon_vision-language-model.png:Zone.Identifier b/images/icon_vision-language-model.png:Zone.Identifier new file mode 100644 index 00000000..bbbaf191 --- /dev/null +++ b/images/icon_vision-language-model.png:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +ZoneId=3 +HostUrl=https://www.figma.com/ diff --git a/images/icon_vision-language-model_512px.jpg b/images/icon_vision-language-model_512px.jpg new file mode 100644 index 00000000..7eb80d37 Binary files /dev/null and b/images/icon_vision-language-model_512px.jpg differ diff --git a/images/icon_vision-language-model_512px.png b/images/icon_vision-language-model_512px.png new file mode 100644 index 00000000..683e0eb6 Binary files /dev/null and b/images/icon_vision-language-model_512px.png differ diff --git a/images/jetson-agx-orin-dev-kit-3qtr-front-right-reverse_800px.png b/images/jetson-agx-orin-dev-kit-3qtr-front-right-reverse_800px.png new file mode 100644 index 00000000..f926cf59 Binary files /dev/null and b/images/jetson-agx-orin-dev-kit-3qtr-front-right-reverse_800px.png differ diff --git a/images/jon-iso_1200x900.png b/images/jon-iso_1200x900.png new file mode 100644 index 00000000..ca6ad442 Binary files /dev/null and b/images/jon-iso_1200x900.png differ diff --git a/images/m48-document-support-guide-256px-blk.png b/images/m48-document-support-guide-256px-blk.png new file mode 100644 index 00000000..e00c504f Binary files /dev/null and b/images/m48-document-support-guide-256px-blk.png differ diff --git a/images/m48-document-support-guide-256px-grn.png b/images/m48-document-support-guide-256px-grn.png new file mode 100644 index 00000000..b3ffa21e Binary files /dev/null and b/images/m48-document-support-guide-256px-grn.png differ diff --git a/images/m48-document-support-guide-256px-wht.png b/images/m48-document-support-guide-256px-wht.png new file mode 100644 index 00000000..2f158112 Binary files /dev/null and b/images/m48-document-support-guide-256px-wht.png differ diff --git a/images/m48-jetson-nano-256px-blk.png b/images/m48-jetson-nano-256px-blk.png new file mode 100644 index 00000000..8fa652de Binary files /dev/null and b/images/m48-jetson-nano-256px-blk.png differ diff --git a/images/m48-jetson-nano-256px-grn.png b/images/m48-jetson-nano-256px-grn.png new file mode 100644 index 00000000..5fb0097e Binary files /dev/null and b/images/m48-jetson-nano-256px-grn.png differ diff --git a/images/m48-jetson-nano-256px-wht.png b/images/m48-jetson-nano-256px-wht.png new file mode 100644 index 00000000..0d07589c Binary files /dev/null and b/images/m48-jetson-nano-256px-wht.png differ diff --git a/images/minigpt4_gleaners.gif b/images/minigpt4_gleaners.gif new file mode 100644 index 00000000..484d2994 Binary files /dev/null and b/images/minigpt4_gleaners.gif differ diff --git a/images/nanoowl_chrome_window.png b/images/nanoowl_chrome_window.png new file mode 100644 index 00000000..5000052e Binary files /dev/null and b/images/nanoowl_chrome_window.png differ diff --git a/images/nvidia_logo_white.png b/images/nvidia_logo_white.png new file mode 100644 index 00000000..777219df Binary files /dev/null and b/images/nvidia_logo_white.png differ diff --git a/images/nvidia_logo_white_60.png b/images/nvidia_logo_white_60.png new file mode 100644 index 00000000..f0f9ac86 Binary files /dev/null and b/images/nvidia_logo_white_60.png differ diff --git a/images/nvidia_logo_white_65.png b/images/nvidia_logo_white_65.png new file mode 100644 index 00000000..9055574b Binary files /dev/null and b/images/nvidia_logo_white_65.png differ diff --git a/images/nvidia_logo_white_70.png b/images/nvidia_logo_white_70.png new file mode 100644 index 00000000..1e73a68c Binary files /dev/null and b/images/nvidia_logo_white_70.png differ diff --git a/images/sam_notebook.png b/images/sam_notebook.png new file mode 100644 index 00000000..afe3a4d5 Binary files /dev/null and b/images/sam_notebook.png differ diff --git a/images/stable-diffusion-webui_green-web.gif b/images/stable-diffusion-webui_green-web.gif new file mode 100644 index 00000000..8db8b840 Binary files /dev/null and b/images/stable-diffusion-webui_green-web.gif differ diff --git a/images/stable-diffusion-xl-central-park.jpg b/images/stable-diffusion-xl-central-park.jpg new file mode 100644 index 00000000..2028dcec Binary files /dev/null and b/images/stable-diffusion-xl-central-park.jpg differ diff --git a/images/stable-diffusion-xl-kids-workshop.jpg b/images/stable-diffusion-xl-kids-workshop.jpg new file mode 100644 index 00000000..dc14a01c Binary files /dev/null and b/images/stable-diffusion-xl-kids-workshop.jpg differ diff --git a/images/stable-diffusion-xl-model-select.jpg b/images/stable-diffusion-xl-model-select.jpg new file mode 100644 index 00000000..301e5493 Binary files /dev/null and b/images/stable-diffusion-xl-model-select.jpg differ diff --git a/images/stable-diffusion-xl-refiner-settings.jpg b/images/stable-diffusion-xl-refiner-settings.jpg new file mode 100644 index 00000000..74958b76 Binary files /dev/null and b/images/stable-diffusion-xl-refiner-settings.jpg differ diff --git a/images/stable-diffusion-xl-robot-generation.jpg b/images/stable-diffusion-xl-robot-generation.jpg new file mode 100644 index 00000000..ea8abefd Binary files /dev/null and b/images/stable-diffusion-xl-robot-generation.jpg differ diff --git a/images/stable-diffusion-xl-robot-mountain.jpg b/images/stable-diffusion-xl-robot-mountain.jpg new file mode 100644 index 00000000..0045138b Binary files /dev/null and b/images/stable-diffusion-xl-robot-mountain.jpg differ diff --git a/images/stable-diffusion-xl-robot-terminal.jpg b/images/stable-diffusion-xl-robot-terminal.jpg new file mode 100644 index 00000000..719abcac Binary files /dev/null and b/images/stable-diffusion-xl-robot-terminal.jpg differ diff --git a/images/stable-diffusion-xl-tokyo-gardens.jpg b/images/stable-diffusion-xl-tokyo-gardens.jpg new file mode 100644 index 00000000..a21078cf Binary files /dev/null and b/images/stable-diffusion-xl-tokyo-gardens.jpg differ diff --git a/images/stable-diffusion_space-ferret.png b/images/stable-diffusion_space-ferret.png new file mode 100644 index 00000000..48964e95 Binary files /dev/null and b/images/stable-diffusion_space-ferret.png differ diff --git a/images/text-generation-webui_sf-trip.gif b/images/text-generation-webui_sf-trip.gif new file mode 100644 index 00000000..f5c4ed71 Binary files /dev/null and b/images/text-generation-webui_sf-trip.gif differ diff --git a/images/tgwui_Download-model.png b/images/tgwui_Download-model.png new file mode 100644 index 00000000..2f0245a0 Binary files /dev/null and b/images/tgwui_Download-model.png differ diff --git a/images/tgwui_llava_drag-n-drop_birds.gif b/images/tgwui_llava_drag-n-drop_birds.gif new file mode 100644 index 00000000..a1030d12 Binary files /dev/null and b/images/tgwui_llava_drag-n-drop_birds.gif differ diff --git a/images/tgwui_model-download-animation.gif b/images/tgwui_model-download-animation.gif new file mode 100644 index 00000000..4e69e8e6 Binary files /dev/null and b/images/tgwui_model-download-animation.gif differ diff --git a/images/tgwui_multimodal_llava_spacewalk.png b/images/tgwui_multimodal_llava_spacewalk.png new file mode 100644 index 00000000..7db6a4a0 Binary files /dev/null and b/images/tgwui_multimodal_llava_spacewalk.png differ diff --git a/images/whisper_ipywebrtc_widget.png b/images/whisper_ipywebrtc_widget.png new file mode 100644 index 00000000..8c28359b Binary files /dev/null and b/images/whisper_ipywebrtc_widget.png differ diff --git a/images/whisper_jupyterlab_notebooks.png b/images/whisper_jupyterlab_notebooks.png new file mode 100644 index 00000000..e6eca2e4 Binary files /dev/null and b/images/whisper_jupyterlab_notebooks.png differ diff --git a/images/whisper_microphone_access.png b/images/whisper_microphone_access.png new file mode 100644 index 00000000..70c87fe8 Binary files /dev/null and b/images/whisper_microphone_access.png differ diff --git a/images/whisper_transcribe_result.png b/images/whisper_transcribe_result.png new file mode 100644 index 00000000..93bf87d2 Binary files /dev/null and b/images/whisper_transcribe_result.png differ diff --git a/images/whisper_web_setting.png b/images/whisper_web_setting.png new file mode 100644 index 00000000..5736db66 Binary files /dev/null and b/images/whisper_web_setting.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..484e35b1 --- /dev/null +++ b/index.html @@ -0,0 +1,1443 @@ + + + + + + + + + + + + + + + + + + + + + + + + Home - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + + + + + +
+
+
+
+ +
+
+

Generative AI at the Edge

+

Bring generative AI to the world with NVIDIA® Jetson™

+ + Explore Tutorials + + + Walkthrough + +
+
+
+
+ + +
+ +
+ + + + +
+
+
+
+

Benchmarks

+
+ +
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + + +
+ + + +
+ +
Copyright © 2023 NVIDIA Corporation
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/overrides/assets/style.css b/overrides/assets/style.css new file mode 100644 index 00000000..13fedc48 --- /dev/null +++ b/overrides/assets/style.css @@ -0,0 +1,879 @@ +:root { + --primary-color: #02007e; + --body-color: #f9f9f9; + --text-color: #636363; + --text-color-dark: #242738; + --white-color: #ffffff; + --light-color: #f8f9fa; + --font-family: Lato; +} + +body { + line-height: 1.5; + font-family: var(--font-family), sans-serif; + -webkit-font-smoothing: antialiased; + font-size: 17px; + color: var(--text-color); + background-color: var(--body-color) +} + +p { + color: var(--text-color); + font-size: 15px +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--text-color-dark); + font-family: var(--font-family), sans-serif; + font-weight: 700; + line-height: 1.2 +} + +h1, +.h1 { + font-size: 45px +} + +h2, +.h2 { + font-size: 32px +} + +h3, +.h3 { + font-size: 26px +} + +h4, +.h4 { + font-size: 20px +} + +h5, +.h5 { + font-size: 18px +} + +h6, +.h6 { + font-size: 14px +} + +.btn { + font-size: 14px; + font-family: var(--font-family), sans-serif; + text-transform: uppercase; + padding: 16px 44px; + border-radius: 0; + font-weight: 600; + border: 0; + position: relative; + z-index: 1; + transition: .2s ease +} + +.btn:focus { + outline: 0; + box-shadow: none !important +} + +.btn:active { + box-shadow: none +} + +.btn-primary { + background: var(--primary-color); + color: var(--white-color) +} + +.btn-primary:active { + background: var(--primary-color) +} + +.btn-primary:hover { + background: var(--primary-color) +} + +.btn-primary:not(:disabled):not(.disabled).active, +.btn-primary:not(:disabled):not(.disabled):active, +.show>.btn-primary.dropdown-toggle { + color: var(--white-color); + background-color: var(--primary-color); + border-color: var(--primary-color) +} + +.inline-button { + line-height: .8rem !important; + padding: 5px 8px !important; + pointer-events: none; + margin-top: -5px +} + +.overflow-hidden { + overflow: hidden !important +} + +::-moz-selection { + background: var(--primary-color); + color: var(--white-color) +} + +::selection { + background: var(--primary-color); + color: var(--white-color) +} + +.preloader { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--white-color); + z-index: 999; + display: flex; + align-items: center; + justify-content: center +} + +ul { + list-style-type: none; + margin: 0; + padding-left: 0; + font-size: 15px +} + +ol { + padding-left: 20px; + font-size: 15px +} + +img { + vertical-align: middle; + border: 0 +} + +a, +a:hover, +a:focus { + text-decoration: none; + color: var(--primary-color) +} + +a:hover, +a:focus { + color: var(--primary-color) +} + +a, +button, +select { + cursor: pointer; + transition: .2s ease +} + +a:focus, +button:focus, +select:focus { + outline: 0 +} + +.slick-slide { + outline: 0 +} + +.section { + padding-top: 80px; + padding-bottom: 80px +} + +@media(max-width:768px) { + .section { + padding-top: 60px + } +} + +.section-sm { + padding-top: 60px; + padding-bottom: 60px +} + +@media(max-width:768px) { + .section-sm { + padding-top: 40px + } +} + +.section-title { + margin-bottom: 40px +} + +.bg-cover { + background-size: cover; + background-position: 50%; + background-repeat: no-repeat +} + +.border-primary { + border-color: #f2f2f2 !important +} + +pre { + padding: 20px +} + +.overlay { + position: relative +} + +.overlay::before { + position: absolute; + content: ''; + height: 100%; + width: 100%; + top: 0; + left: 0; + background: var(--primary-color); + opacity: .8 +} + +.outline-0 { + outline: 0 !important +} + +.d-unset { + display: unset !important +} + +.bg-primary { + background: var(--primary-color) !important +} + +.bg-white { + background-color: var(--white-color) !important +} + +.bg-light { + background-color: var(--light-color) !important +} + +.text-primary { + color: var(--primary-color) !important +} + +.text-color { + color: var(--text-color) !important +} + +.text-dark { + color: var(--text-color-dark) !important +} + +.text-white { + color: var(--white-color) !important +} + +.top-50 { + top: 50px +} + +.navbar { + padding: 0 +} + +@media(max-width:768px) { + .navbar { + padding: 10px 0 + } +} + +.navbar-brand img { + max-width: 100px; + margin-bottom: 0 +} + +.navbar .nav-item .nav-link { + text-transform: uppercase; + padding: 10px 15px !important; + font-size: 15px +} + +.navbar .dropdown:hover .dropdown-menu { + visibility: visible; + opacity: 1; + -webkit-transform: scaleX(1); + transform: scaleX(1) +} + +.navbar .dropdown-menu { + box-shadow: 0 3px 9px 0 rgba(0, 0, 0, .12); + padding: 15px 0; + border: 0; + top: 40px; + left: -35px; + border-radius: 0; + display: block; + visibility: hidden; + transition: .3s ease; + opacity: 0; + -webkit-transform: translateY(20px); + transform: translateY(20px); + background: var(--white-color) +} + +@media(max-width:768px) { + .navbar .dropdown-menu { + display: none; + opacity: 1; + visibility: visible; + -webkit-transform: translateY(0); + transform: translateY(0); + -webkit-transform-origin: unset; + transform-origin: unset + } +} + +.navbar .dropdown-menu.view { + visibility: visible !important; + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + -webkit-transform-origin: top; + transform-origin: top +} + +@media(max-width:768px) { + .navbar .dropdown-menu.view { + display: block + } +} + +.navbar .dropdown-menu.show { + visibility: hidden +} + +@media(max-width:768px) { + .navbar .dropdown-menu.show { + visibility: visible; + display: block + } +} + +.navbar .dropdown-item { + position: relative; + color: var(--text-color-dark); + transition: .2s ease; + font-family: var(--font-family), sans-serif +} + +@media(max-width:768px) { + .navbar .dropdown-item { + text-align: center + } +} + +.navbar .dropdown-item:hover { + color: var(--primary-color); + background: 0 0 +} + +.lang-list { + background: var(--primary-color); + color: var(--white-color) +} + +.lang-list.dark { + color: var(--text-color-dark); + background: var(--white-color) +} + +.banner { + overflow: hidden +} + +.banner p { + font-size: 20px; + opacity: .8 +} + +.banner .nav-link.text-dark { + color: var(--white-color) !important +} + +.banner .nav-link.text-dark:hover { + color: var(--white-color) !important +} + +.banner .navbar-brand { + color: var(--white-color) !important +} + +#project-icon { + float: left; + height: 32px; + width: 32px +} + +#project-description { + margin: 0; + padding: 0 +} + +.ui-helper-hidden-accessible { + display: none +} + +.ui-menu { + background: var(--white-color); + padding: 5px 20px 20px; + right: 0 !important; + max-height: 200px; + overflow: hidden; + border-radius: 0 0 25px 25px; + z-index: 9999; + box-shadow: 0 13px 20px 0 rgba(0, 0, 0, .07) +} + +@media(max-width:575px) { + .ui-menu { + width: calc(100% - 30px) !important + } +} + +@media(min-width:576px) { + .ui-menu { + max-width: 510px !important + } +} + +@media(min-width:768px) { + .ui-menu { + max-width: 690px !important + } +} + +@media(min-width:992px) { + .ui-menu { + max-width: 610px !important + } +} + +@media(min-width:1200px) { + .ui-menu { + max-width: 730px !important + } +} + +.ui-menu-item a { + color: var(--text-color); + padding: 8px 0; + font-size: 15px +} + +.ui-menu-item a:hover { + color: var(--primary-color) +} + +.ui-menu-item:not(:last-child) { + border-bottom: 1px solid #e8e8e8 +} + +.ui-menu-item * { + display: none +} + +.ui-menu-item .ui-corner-all { + display: block +} + +.form-control { + height: 50px; + border-radius: 25px; + border: 0; + padding: 0 20px +} + +.form-control:focus { + border: 0; + box-shadow: none !important +} + +textarea.form-control { + height: 150px; + padding: 20px +} + +.icon { + font-size: 40px +} + +.shadow { + box-shadow: 0 5px 15px rgba(0, 0, 0, .07) !important; + transition: .3s ease +} + +.shadow-bottom { + box-shadow: 0 1px 0 rgba(12, 13, 14, .1), 0 1px 6px rgba(59, 64, 69, .1) +} + +.shadow:hover, +.shadow:focus { + box-shadow: 0 14px 25px rgba(0, 0, 0, .1) !important +} + +.content * { + margin-bottom: 20px +} + +.content img { + max-width: 100%; + height: auto; + margin: 0 auto 15px; + display: block; + text-align: center +} + +.content ul { + padding-left: 0; + margin-bottom: 20px +} + +.content ul li { + padding-left: 20px; + position: relative +} + +.content ul li::before { + position: absolute; + content: ''; + height: 8px; + width: 8px; + border-radius: 50%; + background: var(--primary-color); + opacity: .3; + left: 0; + top: 8px +} + +.list-styled li { + padding-left: 20px; + position: relative +} + +.list-styled li::before { + position: absolute; + content: ''; + height: 8px; + width: 8px; + border-radius: 50%; + background: var(--primary-color); + opacity: .3; + left: 0; + top: 17px +} + +.post-meta { + color: var(--text-color); + font-style: italic; + font-size: 14px +} + +blockquote { + font-size: 20px !important; + color: var(--text-color-dark); + padding: 20px 40px; + border-left: 2px solid var(--primary-color); + margin: 40px 0; + font-weight: 700; + background: var(--light-color) +} + +blockquote p { + margin-bottom: 0 !important +} + +.pagination { + justify-content: space-between +} + +.pagination a { + color: var(--primary-color) +} + +.pagination i { + font-size: 15px; + line-height: 1.8 +} + +#accordion i { + font-size: 14px; + line-height: 2 +} + +table { + text-align: left; + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + border: 1px solid #dee2e6 +} + +table td, +table th { + padding: .75rem; + vertical-align: top; + border: 1px solid #dee2e6; + margin-bottom: 0 +} + +thead { + background: #ececec; + margin-bottom: 0 +} + +tbody { + background: #f8f8f8; + margin-bottom: 0 +} + +.notices { + margin: 2rem 0; + position: relative +} + +.notices p { + padding: 10px +} + +.notices p::before { + position: absolute; + top: 2px; + color: #fff; + font-family: themify; + font-weight: 900; + content: "\e717"; + left: 10px +} + +.notices.note p { + border-top: 30px solid #6ab0de; + background: #e7f2fa +} + +.notices.note p::after { + content: 'Note'; + position: absolute; + top: 2px; + color: #fff; + left: 2rem +} + +.notices.tip p { + border-top: 30px solid #78c578; + background: #e6f9e6 +} + +.notices.tip p::after { + content: 'Tip'; + position: absolute; + top: 2px; + color: #fff; + left: 2rem +} + +.notices.info p { + border-top: 30px solid #f0b37e; + background: #fff2db +} + +.notices.info p::after { + content: 'Info'; + position: absolute; + top: 2px; + color: #fff; + left: 2rem +} + +.notices.warning p { + border-top: 30px solid #e06f6c; + background: #fae2e2 +} + +.notices.warning p::after { + content: 'Warning'; + position: absolute; + top: 2px; + color: #fff; + left: 2rem +} + +.sidebar { + background-color: var(--white-color); + position: sticky; + top: 50px; + margin-bottom: 30px; + padding: 40px 10px 20px +} + +.sidelist { + display: block +} + +li.sidelist>a { + margin-left: 20px; + margin-bottom: 10px; + display: block; + font-size: 20px +} + +li.sidelist li a { + margin: 0 +} + +.sidelist li.sidelist { + display: block +} + +.sidelist li.sidelist.active a { + color: var(--primary-color) +} + +.sidelist li.sidelist.active::before { + opacity: 1 +} + +.page-list li a { + display: none +} + +.page-list li ul a { + display: block +} + +.sidelist li a { + color: var(--text-color-dark); + display: block; + font-size: 15px; + font-weight: 500; + padding: 10px 0; + line-height: 1.4 +} + +p:empty, +p a:empty { + display: none !important +} + +pre { + display: block; + padding: 9.5px; + margin: 10px 0 +} + +code { + margin-bottom: 0 !important; + font-size: 100% +} + +.back-btn { + position: relative +} + +.back-btn::before { + position: absolute; + font-family: themify; + content: "\e6bc"; + font-size: 25px; + height: 30px; + width: 40px; + background-color: var(--white-color); + color: inherit; + text-align: right; + z-index: 1; + left: -5px; + top: -5px +} + +.ui-autocomplete-input { + border-bottom: 1px solid #d4d4d4 !important +} + +.ui-autocomplete-input.active { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0 +} + +.search-icon { + position: absolute; + right: 20px; + top: 18px; + font-size: 14px +} + +i { + transition: .2s ease +} + +a:hover i { + color: var(--primary-color) +} + +pre code::-webkit-scrollbar { + height: 5px +} + +pre code::-webkit-scrollbar-track { + background: #000 +} + +pre code::-webkit-scrollbar-thumb { + background: #888 +} + +.code-tabs { + border: 1px solid #dee2e6; + overflow: hidden; + margin: 20px 0 +} + +.code-tabs .tab-content { + padding: 20px 15px; + margin-bottom: 0 +} + +.code-tabs .tab-content .tab-pane { + margin-bottom: 0 +} + +.code-tabs .nav-tabs { + margin-bottom: 0 +} + +.code-tabs .nav-tabs .nav-item { + padding-left: 0; + border-right: 1px solid #dee2e6 +} + +.code-tabs .nav-tabs .nav-item .nav-link { + text-decoration: none; + font-weight: 500; + border: 0; + margin-bottom: 0 +} + +.code-tabs .nav-tabs .nav-item::before { + display: none +} + +.code-tabs .nav-tabs .nav-item.active { + background: var(--primary-color) +} + +.code-tabs .nav-tabs .nav-item.active .nav-link { + color: var(--white-color) +} \ No newline at end of file diff --git a/overrides/home.html b/overrides/home.html new file mode 100644 index 00000000..8f896f7d --- /dev/null +++ b/overrides/home.html @@ -0,0 +1,481 @@ + +{% extends "main.html" %} +{% block tabs %} +{{ super() }} + + + +
+
+
+
+ +
+
+

Generative AI at the Edge

+

Bring generative AI to the world with NVIDIA® Jetson™

+ + Explore Tutorials + + + Walkthrough + +
+
+
+
+ + +
+ +
+ + + + +
+
+
+
+

Benchmarks

+
+ +
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ + + + + +{% endblock %} +{% block content %} + +{% endblock %} +{% block footer %} +
Copyright © 2023 NVIDIA Corporation
+{% endblock %} diff --git a/overrides/home_navtop.html b/overrides/home_navtop.html new file mode 100644 index 00000000..674b3fc7 --- /dev/null +++ b/overrides/home_navtop.html @@ -0,0 +1,301 @@ + + + + +{% extends "base.html" %} +{% block tabs %} +{{ super() }} + + + + +
+
+
+
+ +
+
+

UP42 Python SDK

+

Access UP42's geospatial collections and processing workflows via Python.

+ + Get started + + + Go to GitHub + +
+
+
+
+ + +
+
+

+ + + + UP42 in Python +

+

Use UP42 via Python: order geospatial data, run analytic workflows, and + generate insights.

+
+
+

+ + + Python ecosystem +

+

Use UP42 together with your preferred Python libraries.

+
+
+

+ + Visualizations +

+

Interactive maps and visualizations. Ideal to use with Jupyter notebooks.

+
+
+ +
+
+
+
+ + + + +{% endblock %} +{% block content %}{% endblock %} +{% block footer %}{% endblock %} \ No newline at end of file diff --git a/overrides/images/JON-with-Gcube.png b/overrides/images/JON-with-Gcube.png new file mode 100644 index 00000000..590f3b1f Binary files /dev/null and b/overrides/images/JON-with-Gcube.png differ diff --git a/overrides/images/JON_Gen-AI-panels.png b/overrides/images/JON_Gen-AI-panels.png new file mode 100644 index 00000000..498dd306 Binary files /dev/null and b/overrides/images/JON_Gen-AI-panels.png differ diff --git a/overrides/images/JON_Gen-AI-panels_1024px.jpg b/overrides/images/JON_Gen-AI-panels_1024px.jpg new file mode 100644 index 00000000..30458936 Binary files /dev/null and b/overrides/images/JON_Gen-AI-panels_1024px.jpg differ diff --git a/overrides/images/JON_Gen-AI-panels_1024px.png b/overrides/images/JON_Gen-AI-panels_1024px.png new file mode 100644 index 00000000..58251f72 Binary files /dev/null and b/overrides/images/JON_Gen-AI-panels_1024px.png differ diff --git a/overrides/images/graph_llm-text-generation.png b/overrides/images/graph_llm-text-generation.png new file mode 100644 index 00000000..41153cc5 Binary files /dev/null and b/overrides/images/graph_llm-text-generation.png differ diff --git a/overrides/images/graph_llm-text-generation.svg b/overrides/images/graph_llm-text-generation.svg new file mode 100644 index 00000000..78ab495b --- /dev/null +++ b/overrides/images/graph_llm-text-generation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/images/graph_vit-vision-transformers.svg b/overrides/images/graph_vit-vision-transformers.svg new file mode 100644 index 00000000..0daa5681 --- /dev/null +++ b/overrides/images/graph_vit-vision-transformers.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/images/graph_vlm-text-generation.svg b/overrides/images/graph_vlm-text-generation.svg new file mode 100644 index 00000000..458fa380 --- /dev/null +++ b/overrides/images/graph_vlm-text-generation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/overrides/images/icon_NanoDB_512px.png b/overrides/images/icon_NanoDB_512px.png new file mode 100644 index 00000000..505b6d09 Binary files /dev/null and b/overrides/images/icon_NanoDB_512px.png differ diff --git a/overrides/images/icon_NanoSAM.png b/overrides/images/icon_NanoSAM.png new file mode 100644 index 00000000..e9240b8d Binary files /dev/null and b/overrides/images/icon_NanoSAM.png differ diff --git a/overrides/images/icon_NanoSAM_512px.jpg b/overrides/images/icon_NanoSAM_512px.jpg new file mode 100644 index 00000000..19ab6d48 Binary files /dev/null and b/overrides/images/icon_NanoSAM_512px.jpg differ diff --git a/overrides/images/icon_NanoSAM_512px.png b/overrides/images/icon_NanoSAM_512px.png new file mode 100644 index 00000000..335f97fb Binary files /dev/null and b/overrides/images/icon_NanoSAM_512px.png differ diff --git a/overrides/images/icon_diffusion.png b/overrides/images/icon_diffusion.png new file mode 100644 index 00000000..f9cb33e6 Binary files /dev/null and b/overrides/images/icon_diffusion.png differ diff --git a/overrides/images/icon_diffusion_512px.jpg b/overrides/images/icon_diffusion_512px.jpg new file mode 100644 index 00000000..07b1d1df Binary files /dev/null and b/overrides/images/icon_diffusion_512px.jpg differ diff --git a/overrides/images/icon_diffusion_512px.png b/overrides/images/icon_diffusion_512px.png new file mode 100644 index 00000000..2c3dc683 Binary files /dev/null and b/overrides/images/icon_diffusion_512px.png differ diff --git a/overrides/images/icon_distillation.png b/overrides/images/icon_distillation.png new file mode 100644 index 00000000..6051b62e Binary files /dev/null and b/overrides/images/icon_distillation.png differ diff --git a/overrides/images/icon_text-generation_512px.jpg b/overrides/images/icon_text-generation_512px.jpg new file mode 100644 index 00000000..934b3c9d Binary files /dev/null and b/overrides/images/icon_text-generation_512px.jpg differ diff --git a/overrides/images/icon_text-generation_512px.png b/overrides/images/icon_text-generation_512px.png new file mode 100644 index 00000000..1435ac81 Binary files /dev/null and b/overrides/images/icon_text-generation_512px.png differ diff --git a/overrides/images/icon_text-generation_iso.png b/overrides/images/icon_text-generation_iso.png new file mode 100644 index 00000000..2458ec87 Binary files /dev/null and b/overrides/images/icon_text-generation_iso.png differ diff --git a/overrides/images/icon_vision-language-model.png b/overrides/images/icon_vision-language-model.png new file mode 100644 index 00000000..23a60e2d Binary files /dev/null and b/overrides/images/icon_vision-language-model.png differ diff --git a/overrides/images/icon_vision-language-model.png:Zone.Identifier b/overrides/images/icon_vision-language-model.png:Zone.Identifier new file mode 100644 index 00000000..bbbaf191 --- /dev/null +++ b/overrides/images/icon_vision-language-model.png:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +ZoneId=3 +HostUrl=https://www.figma.com/ diff --git a/overrides/images/icon_vision-language-model_512px.jpg b/overrides/images/icon_vision-language-model_512px.jpg new file mode 100644 index 00000000..7eb80d37 Binary files /dev/null and b/overrides/images/icon_vision-language-model_512px.jpg differ diff --git a/overrides/images/icon_vision-language-model_512px.png b/overrides/images/icon_vision-language-model_512px.png new file mode 100644 index 00000000..683e0eb6 Binary files /dev/null and b/overrides/images/icon_vision-language-model_512px.png differ diff --git a/overrides/main.html b/overrides/main.html new file mode 100644 index 00000000..92e90535 --- /dev/null +++ b/overrides/main.html @@ -0,0 +1,13 @@ + +{% extends "base.html" %} + + +{% block announce %} + +
View our latest technical webinar, Bringing AI to Life with NVIDIA Jetson on YouTube.
+ +{% endblock %} \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..542111e6 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"benchmarks.html","title":"Benchmarks","text":""},{"location":"benchmarks.html#llm","title":"LLM","text":"

For running LLM benchmarks, see the MLC container documentation.

"},{"location":"benchmarks.html#vlm","title":"VLM","text":"

For running VLM benchmarks, see the MLC and MiniGPT-4 container documentation.

"},{"location":"benchmarks.html#vit","title":"ViT","text":"

VIT performance data from [1] [2] [3]

"},{"location":"benchmarks.html#stable-diffusion","title":"Stable Diffusion","text":""},{"location":"benchmarks.html#riva","title":"Riva","text":"

For running Riva benchmarks, see ASR Performance and TTS Performance.

"},{"location":"benchmarks.html#vector-database","title":"Vector Database","text":"

For running vector database benchmarks, see the NanoDB container documentation.

"},{"location":"community_articles.html","title":"Community Articles","text":"

Below, you'll find a collection of community articles showcasing the implementation of generative AI on the Jetson platform.

"},{"location":"community_articles.html#jetsonhacks-jetson-ai-labs-generative-ai-playground-10-31-2023","title":"JetsonHacks Jetson AI Labs \u2013 Generative AI Playground (10-31-2023)","text":"

JetsonHacks publishes an insightful video that walks developers through the typical steps for running generative AI models on Jetson following this site's tutorials. The video shows the interaction with the LLaVA model.

"},{"location":"community_articles.html#hackster-vision2audio-giving-the-blind-an-understanding-through-ai-10-15-2023","title":"Hackster Vision2Audio - Giving the blind an understanding through AI (10-15-2023)","text":"

Nurgaliyev Shakhizat demonstrates Vision2Audio running on Jetson AGX Orin 64GB Developer Kit to harness the power of LLaVA to help visually impaired people.

"},{"location":"community_articles.html#nvidia-bringing-generative-ai-to-life-with-nvidia-jetson-10-19-2023","title":"NVIDIA Bringing Generative AI to Life with NVIDIA Jetson (10-19-2023)","text":"

Follow this walkthrough of the Jetson AI Lab tutorials along with coverage of the latest features and advances coming to JetPack 6 and beyond:

https://developer.nvidia.com/blog/bringing-generative-ai-to-life-with-jetson/

"},{"location":"community_articles.html#medium-how-to-set-up-your-jetson-device-for-llm-inference-and-fine-tuning-10-02-2023","title":"Medium How to set up your Jetson device for LLM inference and fine-tuning (10-02-2023)","text":"

Michael Yuan's guide demonstrating how to set up the Jetson AGX Orin 64GB Developer Kit specifically for large language model (LLM) inference, highlighting the crucial role of GPUs and the cost-effectiveness of the Jetson AGX Orin for LLM tasks.

https://medium.com/@michaelyuan_88928/how-to-set-up-your-jetson-device-for-llm-inference-and-fine-tuning-682e36444d43

"},{"location":"community_articles.html#hackster-getting-started-with-ai-on-nvidia-jetson-agx-orin-dev-kit-09-16-2023","title":"Hackster Getting Started with AI on Nvidia Jetson AGX Orin Dev Kit (09-16-2023)","text":"

Nurgaliyev Shakhizat demonstrates llamaspeak on Jetson AGX Orin 64GB Developer Kit.

https://www.hackster.io/shahizat/getting-started-with-ai-on-nvidia-jetson-agx-orin-dev-kit-5a55b5

"},{"location":"community_articles.html#hackster-new-ai-tool-is-generating-a-lot-of-buzz-09-13-2023","title":"Hackster New AI Tool Is Generating a Lot of Buzz (09-13-2023)","text":"

Nick Bild provides an insightful introduction to the Jetson Generative AI Playground.

https://www.hackster.io/news/new-ai-tool-is-generating-a-lot-of-buzz-3cc5f23a3598

"},{"location":"community_articles.html#jetsonhacks-use-these-jetson-docker-containers-tutorial-09-04-2023","title":"JetsonHacks Use These! Jetson Docker Containers Tutorial (09-04-2023)","text":"

JetsonHacks has a in-depth tutorial on how to use jetson-containers and even show text-generation-webui and stable-diffusion-webui containers in action!

https://jetsonhacks.com/2023/09/04/use-these-jetson-docker-containers-tutorial/

"},{"location":"community_articles.html#hackster-llama-2-llms-w-nvidia-jetson-and-textgeneration-web-ui-08-17-2023","title":"Hackster LLaMa 2 LLMs w/ NVIDIA Jetson and textgeneration-web-ui (08-17-2023)","text":"

Paul DeCarlo demonstrates 13B and 70B parameter LLama 2 models running locally on Jetson AGX Orin 64GB Developer Kit.

https://www.hackster.io/pjdecarlo/llama-2-llms-w-nvidia-jetson-and-textgeneration-web-ui-96b070

"},{"location":"community_articles.html#hackster-running-a-chatgpt-like-llm-llama2-on-a-nvidia-jetson-cluster-08-14-2023","title":"Hackster Running a ChatGPT-Like LLM-LLaMA2 on a Nvidia Jetson Cluster (08-14-2023)","text":"

Discover how to run a LLaMA-2 7B model on an NVIDIA Jetson cluster in this insightful tutorial by Nurgaliyev Shakhizat.

https://www.hackster.io/shahizat/running-a-chatgpt-like-llm-llama2-on-a-nvidia-jetson-cluster-cbc7d4

"},{"location":"community_articles.html#jetsonhacks-speech-ai-on-nvidia-jetson-tutorial-08-07-2023","title":"JetsonHacks Speech AI on NVIDIA Jetson Tutorial (08-07-2023)","text":"

JetsonHacks gives a nice introduction to NVIDIA RIVA SDK and demonstrate its automated speech recognition (ASR) capability on Jetson Orin Nano Developer Kit.

https://jetsonhacks.com/2023/08/07/speech-ai-on-nvidia-jetson-tutorial/

"},{"location":"community_articles.html#hackster-llm-based-multimodal-ai-w-azure-open-ai-nvidia-jetson-07-12-2023","title":"Hackster LLM based Multimodal AI w/ Azure Open AI & NVIDIA Jetson (07-12-2023)","text":"

Learn how to harness the power of Multimodal AI by running Microsoft JARVIS on an Jetson AGX Orin 64GB Developer Kit, enabling a wide range of AI tasks with ChatGPT-like capabilities, image generation, and more, in this comprehensive guide by Paul DeCarlo.

https://www.hackster.io/pjdecarlo/llm-based-multimodal-ai-w-azure-open-ai-nvidia-jetson-135ff2

"},{"location":"community_articles.html#hackster-how-to-run-a-chatgpt-like-llm-on-nvidia-jetson-board-06-13-2023","title":"Hackster How to Run a ChatGPT-Like LLM on NVIDIA Jetson board (06-13-2023)","text":"

Nurgaliyev Shakhizat explores voice AI assistant on Jetson using FastChat and VoskAPI.

https://www.hackster.io/shahizat/how-to-run-a-chatgpt-like-llm-on-nvidia-jetson-board-41fd79

"},{"location":"getting-started.html","title":"Getting started","text":""},{"location":"tips_ram-optimization.html","title":"RAM Optimization","text":"

Running a LLM requires a huge RAM space.

Especially if you are on Jetson Orin Nano that only has 8GB of RAM, it is crucial to leave as much RAM space available for models.

Here we share a couple of ways to optimize the system RAM usage.

"},{"location":"tips_ram-optimization.html#disabling-the-desktop-gui","title":"Disabling the Desktop GUI","text":"

If you use your Jetson remotely through SSH, you can disable the Ubuntu desktop GUI. This will free up extra memory that the window manager and desktop uses (around ~800MB for Unity/GNOME).

You can disable the desktop temporarily, run commands in the console, and then re-start the desktop when desired:

$ sudo init 3     # stop the desktop\n# log your user back into the console (Ctrl+Alt+F1, F2, ect)\n$ sudo init 5     # restart the desktop\n

If you wish to make this persistent across reboots, you can use the following commands to change the boot-up behavior:

  • To disable desktop on boot

    sudo systemctl set-default multi-user.target\n
  • To enable desktop on boot

    sudo systemctl set-default graphical.target\n
"},{"location":"tips_ram-optimization.html#disabling-misc-services","title":"Disabling misc services","text":"
sudo systemctl disable nvargus-daemon.service\n
"},{"location":"tips_ram-optimization.html#mounting-swap","title":"Mounting Swap","text":"

If you're building containers or working with large models, it's advisable to mount SWAP (typically correlated with the amount of memory in the board). Run these commands to disable ZRAM and create a swap file:

If you have NVMe SSD storage available, it's preferred to allocate the swap file on the NVMe SSD.

sudo systemctl disable nvzramconfig\nsudo fallocate -l 16G /ssd/16GB.swap\nsudo mkswap /ssd/16GB.swap\nsudo swapon /ssd/16GB.swap\n

Then add the following line to the end of /etc/fstab to make the change persistent:

/ssd/16GB.swap  none  swap  sw 0  0\n
"},{"location":"tips_ssd-docker.html","title":"Tips - SSD + Docker","text":"

Once you have your Jetson set up by flashing the latest Jetson Linux (L4T) BSP on it or by flashing the SD card with the whole JetPack image, before embarking on testing out all the great generative AI application using jetson-containers, you want to make sure you have a huge storage space for all the containers and the models you will download.

We are going to show how you can install SSD on your Jetson, and set it up for Docker.

"},{"location":"tips_ssd-docker.html#ssd","title":"SSD","text":""},{"location":"tips_ssd-docker.html#physical-installation","title":"Physical installation","text":"
  1. Unplug power and any peripherals from the Jetson developer kit.
  2. Physically install an NVMe SSD card on the carrier board of your Jetson developer kit, making sure to properly seat the connector and secure with the screw.
  3. Reconnect any peripherals, and then reconnect the power supply to turn on the Jetson developer kit.
  4. Once the system is up, verify that your Jetson identifies a new memory controller on PCI bus:

    lspci\n

    The output should look like the following:

    0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)\n
"},{"location":"tips_ssd-docker.html#format-and-set-up-auto-mount","title":"Format and set up auto-mount","text":"
  1. Run lsblk to find the device name.

    lsblk\n

    The output should look like the following:

    NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT\nloop0          7:0    0    16M  1 loop \nmmcblk1      179:0    0  59.5G  0 disk \n\u251c\u2500mmcblk1p1  179:1    0    58G  0 part /\n\u251c\u2500mmcblk1p2  179:2    0   128M  0 part \n\u251c\u2500mmcblk1p3  179:3    0   768K  0 part \n\u251c\u2500mmcblk1p4  179:4    0  31.6M  0 part \n\u251c\u2500mmcblk1p5  179:5    0   128M  0 part \n\u251c\u2500mmcblk1p6  179:6    0   768K  0 part \n\u251c\u2500mmcblk1p7  179:7    0  31.6M  0 part \n\u251c\u2500mmcblk1p8  179:8    0    80M  0 part \n\u251c\u2500mmcblk1p9  179:9    0   512K  0 part \n\u251c\u2500mmcblk1p10 179:10   0    64M  0 part \n\u251c\u2500mmcblk1p11 179:11   0    80M  0 part \n\u251c\u2500mmcblk1p12 179:12   0   512K  0 part \n\u251c\u2500mmcblk1p13 179:13   0    64M  0 part \n\u2514\u2500mmcblk1p14 179:14   0 879.5M  0 part \nzram0        251:0    0   1.8G  0 disk [SWAP]\nzram1        251:1    0   1.8G  0 disk [SWAP]\nzram2        251:2    0   1.8G  0 disk [SWAP]\nzram3        251:3    0   1.8G  0 disk [SWAP]\nnvme0n1      259:0    0 238.5G  0 disk \n

    Identify the device corresponding to your SSD. In this case, it is nvme0n1.

  2. Format the SSD, create a mount point, and mount it to the filesystem.

    sudo mkfs.ext4 /dev/nvme0n1\n

    You can choose any name for the mount point directory. We use /ssd here, but in jetson-containers' setup.md documentation, /mnt is used.

    sudo mkdir /ssd\n
    sudo mount /dev/nvme0n1 /ssd\n
  3. In order to ensure that the mount persists after boot, add an entry to the fstab file:

    First, identify the UUID for your SSD:

    lsblk -f\n

    Then, add a new entry to the fstab file:

    sudo vi /etc/fstab\n

    Insert the following line, replacing the UUID with the value found from lsblk -f:

    UUID=************-****-****-****-******** /ssd/ ext4 defaults 0 2\n
  4. Finally, change the ownership of the /ssd directory.

    sudo chown ${USER}:${USER} /ssd\n
"},{"location":"tips_ssd-docker.html#docker","title":"Docker","text":"
  1. Install nvidia-container package.

    Note: If you used an NVIDIA-supplied SD card image to flash your SD card, all necessary JetPack components (including nvidia-containers) and Docker are already pre-installed, so this step can be skipped.

    sudo apt update\nsudo apt install -y nvidia-container\n

    JetPack 6.0 DP users

    If you flash Jetson Linux (L4T) R36.2 (JetPack 6.0 DP) on your Jetson using SDK Manager, and install nvidia-container using apt, on JetPack 6.0 it no longer automatically installs Docker.

    Therefore, you need to run the following to manually install Docker and set it up.

    sudo apt update\nsudo apt install -y nvidia-container curl\ncurl https://get.docker.com | sh && sudo systemctl --now enable docker\nsudo nvidia-ctk runtime configure --runtime=docker\n
  2. Restart the Docker service and add your user to the docker group, so that you don't need to use the command with sudo.

    sudo systemctl restart docker\nsudo usermod -aG docker $USER\nnewgrp docker\n
  3. Add default runtime in /etc/docker/daemon.json

    sudo vi /etc/docker/daemon.json\n

    Insert the \"default-runtime\": \"nvidia\" line as following:

    {\n\"runtimes\": {\n\"nvidia\": {\n\"path\": \"nvidia-container-runtime\",\n\"runtimeArgs\": []\n}\n},\n\"default-runtime\": \"nvidia\"\n}\n
  4. Restart Docker

    sudo systemctl daemon-reload && sudo systemctl restart docker\n
"},{"location":"tips_ssd-docker.html#migrate-docker-directory-to-ssd","title":"Migrate Docker directory to SSD","text":"

Now that the SSD is installed and available on your device, you can use the extra storage capacity to hold the storage-demanding Docker directory.

  1. Stop the Docker service.

    sudo systemctl stop docker\n
  2. Move the existing Docker folder

    sudo du -csh /var/lib/docker/ && \\\nsudo mkdir /ssd/docker && \\\nsudo rsync -axPS /var/lib/docker/ /ssd/docker/ && \\\nsudo du -csh  /ssd/docker/ 
  3. Edit /etc/docker/daemon.json

    sudo vi /etc/docker/daemon.json\n

    Insert \"data-root\" line like the following.

    {\n\"runtimes\": {\n\"nvidia\": {\n\"path\": \"nvidia-container-runtime\",\n\"runtimeArgs\": []\n}\n},\n\"default-runtime\": \"nvidia\",\n\"data-root\": \"/ssd/docker\"\n}\n
  4. Rename the old Docker data directory

    sudo mv /var/lib/docker /var/lib/docker.old\n
  5. Restart the docker daemon

    sudo systemctl daemon-reload && \\\nsudo systemctl restart docker && \\\nsudo journalctl -u docker\n
"},{"location":"tips_ssd-docker.html#test-docker-on-ssd","title":"Test Docker on SSD","text":"
  1. [Terminal 1] First, open a terminal to monitor the disk usage while pulling a Docker image.

    watch -n1 df 
  2. [Terminal 2] Next, open a new terminal and start Docker pull.

    docker pull nvcr.io/nvidia/l4t-base:r35.2.1\n
  3. [Terminal 1] Observe that the disk usage on /ssd goes up as the container image is downloaded and extracted.

    ~$ docker image ls\nREPOSITORY                  TAG       IMAGE ID       CREATED        SIZE\nnvcr.io/nvidia/l4t-base     r35.2.1   dc07eb476a1d   7 months ago   713MB\n
"},{"location":"tips_ssd-docker.html#final-verification","title":"Final Verification","text":"

Reboot your Jetson, and verify that you observe the following:

~$ sudo blkid | grep nvme\n/dev/nvme0n1: UUID=\"9fc06de1-7cf3-43e2-928a-53a9c03fc5d8\" TYPE=\"ext4\"\n\n~$ df -h\nFilesystem      Size  Used Avail Use% Mounted on\n/dev/mmcblk1p1  116G   18G   94G  16% /\nnone            3.5G     0  3.5G   0% /dev\ntmpfs           3.6G  108K  3.6G   1% /dev/shm\ntmpfs           734M   35M  699M   5% /run\ntmpfs           5.0M  4.0K  5.0M   1% /run/lock\ntmpfs           3.6G     0  3.6G   0% /sys/fs/cgroup\ntmpfs           734M   88K  734M   1% /run/user/1000\n/dev/nvme0n1    458G  824M  434G   1% /ssd\n\n~$ docker info | grep Root\n Docker Root Dir: /ssd/docker\n\n~$ sudo ls -l /ssd/docker/\ntotal 44\ndrwx--x--x  4 root root 4096 Mar 22 11:44 buildkit\ndrwx--x---  2 root root 4096 Mar 22 11:44 containers\ndrwx------  3 root root 4096 Mar 22 11:44 image\ndrwxr-x---  3 root root 4096 Mar 22 11:44 network\ndrwx--x--- 13 root root 4096 Mar 22 16:20 overlay2\ndrwx------  4 root root 4096 Mar 22 11:44 plugins\ndrwx------  2 root root 4096 Mar 22 16:19 runtimes\ndrwx------  2 root root 4096 Mar 22 11:44 swarm\ndrwx------  2 root root 4096 Mar 22 16:20 tmp\ndrwx------  2 root root 4096 Mar 22 11:44 trust\ndrwx-----x  2 root root 4096 Mar 22 16:19 volumes\n\n~$ sudo du -chs /ssd/docker/\n752M    /ssd/docker/\n752M    total\n\n~$ docker info | grep -e \"Runtime\" -e \"Root\"\nRuntimes: io.containerd.runtime.v1.linux nvidia runc io.containerd.runc.v2\n Default Runtime: nvidia\n Docker Root Dir: /ssd/docker\n

Your Jetson is now set up with the SSD!

"},{"location":"try.html","title":"Try","text":"

Jump to NVIDIA Jetson Store.

"},{"location":"tutorial-intro.html","title":"Tutorial - Introduction","text":""},{"location":"tutorial-intro.html#overview","title":"Overview","text":"

Our tutorials are divided into categories roughly based on model modality, the type of data to be processed or generated.

"},{"location":"tutorial-intro.html#text-llm","title":"Text (LLM)","text":"text-generation-webui Interact with a local AI assistant by running a LLM with oobabooga's text-generaton-webui llamaspeak Talk live with Llama using Riva ASR/TTS, and chat about images with Llava!"},{"location":"tutorial-intro.html#text-vision-vlm","title":"Text + Vision (VLM)","text":"

Give your locally running LLM an access to vision!

Mini-GPT4 Mini-GPT4, an open-source model that demonstrate vision-language capabilities. LLaVA Large Language and Vision Assistant, multimodal model that combines a vision encoder and Vicuna LLM for general-purpose visual and language understanding."},{"location":"tutorial-intro.html#image-generation","title":"Image Generation","text":"Stable Diffusion Run AUTOMATIC1111's stable-diffusion-webui to generate images from prompts Stable Diffusion XL A newer ensemble pipeline consisting of a base model and refiner that results in significantly enhanced and detailed image generation capabilities."},{"location":"tutorial-intro.html#vision-transformers-vit","title":"Vision Transformers (ViT)","text":"EfficientVIT MIT Han Lab's EfficientViT, Multi-Scale Linear Attention for High-Resolution Dense Prediction NanoSAM NanoSAM, SAM model variant capable of running in real-time on Jetson NanoOWL OWL-ViT optimized to run real-time on Jetson with NVIDIA TensorRT SAM Meta's SAM, Segment Anything model TAM TAM, Track-Anything model, is an interactive tool for video object tracking and segmentation"},{"location":"tutorial-intro.html#vector-database","title":"Vector Database","text":"NanoDB Interactive demo to witness the impact of Vector Database that handles multimodal data"},{"location":"tutorial-intro.html#audio","title":"Audio","text":"AudioCraft Meta's AudioCraft, to produce high-quality audio and music Whisper OpenAI's Whisper, pre-trained model for automatic speech recognition (ASR)"},{"location":"tutorial-intro.html#tips","title":"Tips","text":"Knowledge Distillation SSD + Docker Memory optimization"},{"location":"tutorial-intro.html#about-nvidia-jetson","title":"About NVIDIA Jetson","text":"

Note

We are mainly targeting Jetson Orin generation devices for deploying the latest LLMs and generative AI models.

Jetson AGX Orin 64GB Developer Kit Jetson AGX Orin Developer Kit Jetson Orin Nano Developer Kit GPU 2048-core NVIDIA Ampere architecture GPU with 64 Tensor Cores 1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores RAM(CPU+GPU) 64GB 32GB 8GB Storage 64GB eMMC (+ NVMe SSD) microSD card (+ NVMe SSD)"},{"location":"tutorial_audiocraft.html","title":"Tutorial - AudioCraft","text":"

Let's run Meta's AudioCraft, to produce high-quality audio and music on Jetson!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 10.7 GB for audiocraft container image
    • Space for checkpoints
"},{"location":"tutorial_audiocraft.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_audiocraft.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag audiocraft)\n

The container has a default run command (CMD) that will automatically start the Jupyter Lab server.

Open your browser and access http://<IP_ADDRESS>:8888.

The default password for Jupyter Lab is nvidia.

"},{"location":"tutorial_audiocraft.html#run-jupyter-notebooks","title":"Run Jupyter notebooks","text":"

AudioCraft repo comes with demo Jupyter notebooks.

On Jupyter Lab navigation pane on the left, double-click demos folder.

"},{"location":"tutorial_audiocraft.html#audiogen-demo","title":"AudioGen demo","text":"

For \"Text-conditional Generation\", you should get something like this.

Your browser does not support the audio element.

Info

You may encounter an error message like the following when executing the first cell, but you can keep going.

A matching Triton is not available, some optimizations will not be enabled.\nError caught was: No module named 'triton'\n

Warning

When running the 5-th cell of audiogen_demo.ipynb, you may run into \"Failed to load audio\" RuntimeError.

"},{"location":"tutorial_audiocraft.html#musicgen-demo","title":"MusicGen demo","text":"

For \"Text-conditional Generation\", you should get something like this.

Your browser does not support the audio element.

Warning

When running the 5-th cell of musicgen_demo.ipynb, you may run into \"Failed to load audio\" RuntimeError.

"},{"location":"tutorial_distillation.html","title":"CLIP model distillation","text":"

See \"Jetson Introduction to Knowledge Distillation\" repo's README.md.

https://github.com/NVIDIA-AI-IOT/jetson-intro-to-distillation

"},{"location":"tutorial_efficientvit.html","title":"Tutorial - EfficientViT","text":"

Let's run MIT Han Lab's EfficientViT on Jetson!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 10.9 GB for efficientvit container image
    • Space for checkpoints
"},{"location":"tutorial_efficientvit.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_efficientvit.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag efficientvit)\n
"},{"location":"tutorial_efficientvit.html#usage-of-efficientvit","title":"Usage of EfficientViT","text":"

The official EfficientViT repo shows the complete usage information.

https://github.com/mit-han-lab/efficientvit#usage

"},{"location":"tutorial_efficientvit.html#run-examplebenchmark","title":"Run example/benchmark","text":"

Inside the container, a small benchmark script benchmark.py is added under /opt/efficientvit directory by the jetson-container build process.

It is to test EfficientViT-L2-SAM in bounding box mode, so we can use this as an example and verify the output.

"},{"location":"tutorial_efficientvit.html#download-l2pt-model","title":"Download l2.pt model","text":"
mkdir -p /data/models/efficientvit/sam/\ncd /data/models/efficientvit/sam/\nwget https://huggingface.co/han-cai/efficientvit-sam/resolve/main/l2.pt\n

The downloaded checkpoint file is stored on the /data/ directory that is mounted from the Docker host.

"},{"location":"tutorial_efficientvit.html#run-benchmark-script","title":"Run benchmark script","text":"
cd /opt/efficientvit\npython3 ./benchmark.py\n

At the end you should see a summary like the following.

AVERAGE of 2 runs:\n  encoder --- 0.062 sec\n  latency --- 0.083 sec\nMemory consumption :  3419.68 MB\n
"},{"location":"tutorial_efficientvit.html#check-the-outputresult","title":"Check the output/result","text":"

The output image file (of the last inference result) is stored as /data/benchmarks/efficientvit_sam_demo.png.

It is stored under /data/ directory that is mounted from the Docker host. So you can go back to your host machine, and check ./jetson-containers/data/benchmark/ directory.

You should find the output like this.

"},{"location":"tutorial_llamaspeak.html","title":"Tutorial - llamaspeak","text":"

Talk live with Llama using Riva ASR/TTS, and chat about images with Llava!

  • llamaspeak:v1 - uses text-generation-webui loaders for LLM models (llama.cpp, exllama, AutoGPTQ, Transformers)
  • llamaspeak:v2 - uses AWQ/MLC from local_llm package, web chat voice agent

llamaspeak v2 has multimodal support for chatting about images with quantized Llava-1.5:

Multimodal Voice Chat with LLaVA-1.5 13B on NVIDIA Jetson AGX Orin (container: local_llm)

See the Voice Chat section of the local_llm documentation to run llamaspeak v2.

"},{"location":"tutorial_llava.html","title":"Tutorial - LLaVA","text":"

LLaVA is a leading multimodal vision/language model that you can run locally on Jetson to answer questions about image prompts and queries. Internally, it uses the CLIP vision encoder to transform images into a common embedding space that the LLM (which is the same as Llama architecture) can understand with text. Below we will cover a few methods to Llava on Jetson, some with quantization for improved performance:

  1. Chat with Llava using text-generation-webui
  2. Run from the terminal with llava.serve.cli

"},{"location":"tutorial_llava.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_llava.html#1-chat-with-llava-using-text-generation-webui","title":"1. Chat with Llava using text-generation-webui","text":"

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.2GB for text-generation-webui container image
    • Space for models
      • CLIP model : 1.7GB
      • Llava-v1.5-13B-GPTQ model : 7.25GB

The oobabooga chat UI from the LLM tutorial has a multimodal extension for Llava, and it supports 4-bit quantization using AutoGPTQ. If you already used text-generation-webui before 12/2023, do sudo docker pull $(./autotag text-generation-webui) to update to the latest container.

"},{"location":"tutorial_llava.html#download-model","title":"Download Model","text":"
./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) \\\n  python3 download-model.py --output=/data/models/text-generation-webui \\\n    TheBloke/llava-v1.5-13B-GPTQ\n
"},{"location":"tutorial_llava.html#start-web-ui-with-multimodal-extension","title":"Start Web UI with Multimodal Extension","text":"
./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) \\\n  python3 server.py --listen \\\n    --model-dir /data/models/text-generation-webui \\\n    --model TheBloke_llava-v1.5-13B-GPTQ \\\n    --multimodal-pipeline llava-v1.5-13b \\\n    --loader autogptq \\\n    --disable_exllama \\\n    --verbose\n

Go to Chat tab, drag and drop an image of your choice into the Drop Image Here area, and your question in the text area above and hit Generate.

"},{"location":"tutorial_llava.html#result","title":"Result","text":""},{"location":"tutorial_llava.html#2-run-from-the-terminal-with-llavaservecli","title":"2. Run from the terminal with llava.serve.cli","text":"

What you need

  1. One of the following Jetson:

    Jetson AGX Orin 64GB Jetson AGX Orin (32GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.1GB for llava container image
    • Space for models
      • 7B model : 14GB, or
      • 13B model : 26GB

This example uses the upstream Llava codebase to run the original, unquantized Llava models from the command-line. As such, it uses more memory due to using FP16 precision, and is provided mostly as a reference for debugging. See the Llava container readme for more infomation.

"},{"location":"tutorial_llava.html#llava-v15-7b","title":"llava-v1.5-7b","text":"
./run.sh $(./autotag llava) \\\n  python3 -m llava.serve.cli \\\n    --model-path liuhaotian/llava-v1.5-7b \\\n    --image-file /data/images/hoover.jpg\n
"},{"location":"tutorial_llava.html#llava-v15-13b","title":"llava-v1.5-13b","text":"

./run.sh $(./autotag llava) \\\npython3 -m llava.serve.cli \\\n--model-path liuhaotian/llava-v1.5-13b \\\n--image-file /data/images/hoover.jpg\n
This may run only on Jetson AGX Orin 64GB due to memory requirements.

"},{"location":"tutorial_minigpt4.html","title":"Tutorial - MiniGPT-4","text":"

Give your locally running LLM an access to vision, by running MiniGPT-4 on Jetson!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 5.8GB for container image
    • Space for pre-quantized MiniGPT-4 model
"},{"location":"tutorial_minigpt4.html#set-up-a-container-for-minigpt-4","title":"Set up a container for MiniGPT-4","text":"

See jetson-containers' minigpt4 package README for more infomation**

"},{"location":"tutorial_minigpt4.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_minigpt4.html#start-minigpt4-container-with-models","title":"Start minigpt4 container with models","text":"

To start the MiniGPT4 container and webserver with the recommended models, run this command:

cd jetson-containers\n./run.sh $(./autotag minigpt4) /bin/bash -c 'cd /opt/minigpt4.cpp/minigpt4 && python3 webui.py \\\n  $(huggingface-downloader --type=dataset maknee/minigpt4-13b-ggml/minigpt4-13B-f16.bin) \\\n  $(huggingface-downloader --type=dataset maknee/ggml-vicuna-v0-quantized/ggml-vicuna-13B-v0-q5_k.bin)'\n

Then, open your web browser and access http://<IP_ADDRESS>:7860.

"},{"location":"tutorial_minigpt4.html#results","title":"Results","text":""},{"location":"tutorial_nanodb.html","title":"Tutorial - NanoDB","text":"

Let's run NanoDB's interactive demo to witness the impact of Vector Database that handles multimodal data.

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 7.0GB for container image
"},{"location":"tutorial_nanodb.html#set-up-a-container-for-nanodb","title":"Set up a container for nanodb","text":""},{"location":"tutorial_nanodb.html#clone-jetson-containers","title":"Clone jetson-containers","text":"

See jetson-containers' nanodb package README for more infomation**

git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_nanodb.html#how-to-start","title":"How to start","text":""},{"location":"tutorial_nanodb.html#download-your-data","title":"Download your data","text":"

Just for an example, let's just use MS COCO dataset.

cd jetson-containers\nmkdir data/datasets/coco/\ncd data/datasets/coco\nwget http://images.cocodataset.org/zips/train2017.zip\nunzip train2017.zip\n
"},{"location":"tutorial_nanodb.html#indexing-data","title":"Indexing Data","text":"

First, we need to build the index by scanning your dataset directory.

cd jetson-containers\n./run.sh -v ${PWD}/data/datasets/coco:/my_dataset $(./autotag nanodb) \\\n  python3 -m nanodb \\\n    --scan /my_dataset \\\n    --path /my_dataset/nanodb \\\n    --autosave --validate \n

This will take about 2 hours.

Once the database has loaded and completed any start-up operations , it will drop down to a > prompt from which the user can run search queries. You can quickly check the operation by typing your query on this prompt.

> a girl riding a horse\n\n* index=80110   /data/datasets/coco/2017/train2017/000000393735.jpg      similarity=0.29991915822029114\n* index=158747  /data/datasets/coco/2017/unlabeled2017/000000189708.jpg  similarity=0.29254037141799927\n* index=123846  /data/datasets/coco/2017/unlabeled2017/000000026239.jpg  similarity=0.292171448469162\n* index=127338  /data/datasets/coco/2017/unlabeled2017/000000042508.jpg  similarity=0.29118549823760986\n* index=77416   /data/datasets/coco/2017/train2017/000000380634.jpg      similarity=0.28964102268218994\n* index=51992   /data/datasets/coco/2017/train2017/000000256290.jpg      similarity=0.28929752111434937\n* index=228640  /data/datasets/coco/2017/unlabeled2017/000000520381.jpg  similarity=0.28642547130584717\n* index=104819  /data/datasets/coco/2017/train2017/000000515895.jpg      similarity=0.285491943359375\n

You can press Ctrl+C to exit from the app and the container.

"},{"location":"tutorial_nanodb.html#interactive-web-ui","title":"Interactive web UI","text":"

Spin up the Gradio server.

cd jetson-containers\n./run.sh -v ${PWD}/data/datasets/coco:/my_dataset $(./autotag nanodb) \\\n  python3 -m nanodb \\\n    --path /my_dataset/nanodb \\\n    --server --port=7860\n

You can use your PC (or any machine) that can access your Jetson via a network, and navigate your browser to http://<IP_ADDRESS>:7860

You can enter text search queries as well as drag/upload images.

"},{"location":"tutorial_nanoowl.html","title":"Tutorial - NanoOWL","text":"

Let's run NanoOWL, OWL-ViT optimized to run real-time on Jetson with NVIDIA TensorRT.

What you need

  1. One of the following Jetson:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 7.2 GB for container image
    • Spaces for models
"},{"location":"tutorial_nanoowl.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_nanoowl.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag nanoowl)\n
"},{"location":"tutorial_nanoowl.html#how-to-run-the-tree-prediction-live-camera-example","title":"How to run the tree prediction (live camera) example","text":"
  1. Ensure you have a camera device connected

    ls /dev/video*\n

    If no video device is found, exit from the container and check if you can see a video device on the host side.

  2. Launch the demo

    cd examples/tree_demo\npython3 tree_demo.py ../../data/owl_image_encoder_patch32.engine\n

    Info

    If it fails to find or load the TensorRT engine file, build the TensorRT engine for the OWL-ViT vision encoder on your Jetson device.

    python3 -m nanoowl.build_image_encoder_engine \\\ndata/owl_image_encoder_patch32.engine\n
  3. Second, open your browser to http://<ip address>:7860

  4. Type whatever prompt you like to see what works!

    Here are some examples

    • Example: [a face [a nose, an eye, a mouth]]
    • Example: [a face (interested, yawning / bored)]
    • Example: (indoors, outdoors)
"},{"location":"tutorial_nanoowl.html#result","title":"Result","text":""},{"location":"tutorial_nanosam.html","title":"Tutorial - NanoSAM","text":"

Let's run NVIDIA's NanoSAM to check out the performance gain by distillation.

What you need

  1. One of the following Jetson:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.3GB for container image
    • Spaces for models
"},{"location":"tutorial_nanosam.html#set-up-a-container-for-nanosam","title":"Set up a container for nanosam","text":""},{"location":"tutorial_nanosam.html#clone-jetson-containers","title":"Clone jetson-containers","text":"

See jetson-containers' nanosam package README for more infomation**

git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_nanosam.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag nanosam)\n
"},{"location":"tutorial_nanosam.html#run-examples","title":"Run examples","text":"

Inside the container, you can move to /opt/nanosam directory, to go through all the examples demonstrated on the repo.

cd /opt/nanosam\n

To run the \"Example 1 - Segment with bounding box\":

python3 examples/basic_usage.py \\\n    --image_encoder=\"data/resnet18_image_encoder.engine\" \\\n    --mask_decoder=\"data/mobile_sam_mask_decoder.engine\"\n

The result is saved under /opt/nanosam/data/basic_usage_out.jpg.

To check on your host machine, you can copy that into /data directory of the container where that is mounted from the host.

cp data/basic_usage_out.jpg /data/\n

Then you can go to your host system, and find the file under the jetson_containers' data directory, like jetson_containers/data/basic_usage_out.jpg.

"},{"location":"tutorial_nanosam.html#results","title":"Results","text":""},{"location":"tutorial_sam.html","title":"Tutorial - SAM (Segment Anything)","text":"

Let's run Meta's SAM on NVIDIA Jetson.

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)\u26a0\ufe0f1

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.8GB for container image
    • Spaces for models
"},{"location":"tutorial_sam.html#set-up-a-container-for-sam","title":"Set up a container for sam","text":""},{"location":"tutorial_sam.html#clone-jetson-containers","title":"Clone jetson-containers","text":"

See jetson-containers' sam package README for more infomation**

git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_sam.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag sam)\n

The container has a default run command (CMD) that will automatically start the Jupyter Lab server.

Open your browser and access http://<IP_ADDRESS>:8888.

The default password for Jupyter Lab is nvidia.

"},{"location":"tutorial_sam.html#run-jupyter-notebook","title":"Run Jupyter notebook","text":"

In Jupyter Lab, navigate to notebooks and open automatic_mask_generator_example.py notebook.

Create a new cell at the top, insert the model download command below and run the cell.

!wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth\n

Then go through executing all the cells below Set-up.

"},{"location":"tutorial_sam.html#results","title":"Results","text":"
  1. The biggest vit_h (2.4GB) model may not ran due to OOM, but vit_l (1.1GB) runs on Jetson Orin Nano.\u00a0\u21a9

"},{"location":"tutorial_stable-diffusion-xl.html","title":"Tutorial - Stable Diffusion XL","text":"

Stable Diffusion XL is a newer ensemble pipeline consisting of a base model and refiner that results in significantly enhanced and detailed image generation capabilities. All told, SDXL 1.0 has 6.6 billion model parameters, in comparison to 0.98 billion for the original SD 1.5 model.

What you need

  1. One of the following Jetson devices (SDXL requires >= ~13GB memory)

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.8GB for container image
    • 12.4GB for SDXL models
  4. Have followed the previous stable-diffusion-webui tutorial and have the webserver container running.

"},{"location":"tutorial_stable-diffusion-xl.html#downloading-sdxl-models","title":"Downloading SDXL Models","text":"

Stable Diffusion XL is supported through AUTOMATIC1111's stable-diffusion-webui with some additional settings. First you need to download the SDXL models to your jetson-containers data directory (which is automatically mounted into the container)

# run these outside of container, and replace CONTAINERS_DIR with the path to the jetson-containers repo on your device\nCONTAINERS_DIR=/path/to/your/jetson-containers\nMODEL_DIR=$CONTAINERS_DIR/data/models/stable-diffusion/models/Stable-diffusion/\n\nsudo chown -R $USER $MODEL_DIR\n\nwget -P $MODEL_DIR https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors\nwget -P $MODEL_DIR https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors\n

It's assumed that you already have the stable-diffusion-webui container and webserver running from the previous tutorial.

"},{"location":"tutorial_stable-diffusion-xl.html#sdxl-settings","title":"SDXL Settings","text":"

After the models have finished downloading, click the \ud83d\udd04 button to refresh the model list in the web UI. Select sd_xl_base_1.0.safetensors from the Stable Diffusion checkpoint drop-down:

Then under the Generation tab, expand the Refiner section, and select sd_xl_refiner_1.0.safetensors from the drop-down:

Guidance on other relevant settings:

  • Change the width/height to 1024x1024. SDXL works best at higher resolutions, and using 512x512 often results in more simplistic/cartoonish content. Changing image resolutions impacts the actual scene contents of the image, not just the details.
  • The refiner's Switch at setting dictates the step at which the refiner takes over from the base model. At this point, additional subject content will no longer be added to the scene, but rather its details further refined in the image.
  • Typical Sampling steps are between 20-40 and Switch at is between 0.7-0.9. This takes experimentation to find the best combination for the characteristics of your desired output.
  • Extensive negative prompts are not as necessary in the same way as SD 1.5 was (e.g. low quality, jpeg artifacts, blurry, ect)
  • CFG Scale controls how closely the model conforms to your prompt versus how creative it is.

When you get a good image, remember to save your random seed and settings so you can re-generate it later!

"},{"location":"tutorial_stable-diffusion-xl.html#results","title":"Results","text":"

photograph of a friendly robot alongside a person climbing a mountain (seed 1576166644, steps 25, switch @ 0.8, cfg scale 15)

a girl and a boy building a friendly robot in their basement workshop (seed 642273464, steps 25, switch @ 0.9, cfg scale 7)

small friendly robots playing games with people, in a futuristic Tokyo central park gardens with cherry blossoms and water, coy fish swimming in the water, sunshine (seed 642273464, steps 40, switch @ 0.8, cfg scale 7)

small friendly robots playing games with people in a futuristic New York City Central Park in autumn, water (seed 642273464, steps 25, switch @ 0.8, cfg scale 7)

Want to explore using Python APIs to run diffusion models directly? See jetson-containers/stable-diffusion.

"},{"location":"tutorial_stable-diffusion.html","title":"Tutorial - Stable Diffusion","text":"

Let's run AUTOMATIC1111's stable-diffusion-webui on NVIDIA Jetson to generate images from our prompts!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.8GB for container image
    • 4.1GB for SD 1.5 model
"},{"location":"tutorial_stable-diffusion.html#set-up-a-container-for-stable-diffusion-webui","title":"Set up a container for stable-diffusion-webui","text":"

The jetson-containers project provides pre-built Docker images for stable-diffusion-webui. You can clone the repo to use its utilities that will automatically pull/start the correct container for you, or you can do it manually.

git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n

Info

JetsonHacks provides an informative walkthrough video on jetson-containers, showcasing the usage of both the stable-diffusion-webui and text-generation-webui containers. You can find the complete article with detailed instructions here.

"},{"location":"tutorial_stable-diffusion.html#how-to-start","title":"How to start","text":"

If you are running this for the first time, go through the pre-setup and see the jetson-containers/stable-diffusion-webui readme.

Use run.sh and autotag script to automatically pull or build a compatible container image:

cd jetson-containers\n./run.sh $(./autotag stable-diffusion-webui)\n

The container has a default run command (CMD) that will automatically start the webserver like this:

cd /opt/stable-diffusion-webui && python3 launch.py \\\n  --data=/data/models/stable-diffusion \\\n  --enable-insecure-extension-access \\\n  --xformers \\\n  --listen \\\n  --port=7860\n

You should see it downloading the model checkpoint on the first run.

Open your browser and access http://<IP_ADDRESS>:7860

"},{"location":"tutorial_stable-diffusion.html#results-output-examples","title":"Results / Output Examples","text":""},{"location":"tutorial_stable-diffusion.html#stable-diffusion-xl","title":"Stable Diffusion XL","text":"

To generate even higher-quality and detailed images, check out the next part of the tutorial that uses the latest Stable Diffusion XL models!

Want to explore using Python APIs to run diffusion models directly? See jetson-containers/stable-diffusion.

"},{"location":"tutorial_tam.html","title":"Tutorial - SAM (Segment Anything)","text":"

Let's run TAM to perform Segment Anything on videos on NVIDIA Jetson.

What you need

  1. One of the following Jetson:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.8GB for container image
    • Spaces for models
"},{"location":"tutorial_tam.html#set-up-a-container-for-tam","title":"Set up a container for tam","text":""},{"location":"tutorial_tam.html#clone-jetson-containers","title":"Clone jetson-containers","text":"

See jetson-containers' tam package README for more infomation**

git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_tam.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag tam)\n

The container has a default run command (CMD) that will automatically start TAM's web server.

Open your browser and access http://<IP_ADDRESS>:12212.

"},{"location":"tutorial_tam.html#tam-web-ui","title":"TAM web UI","text":"

Check out the official tutorial to learn how to operate the web UI.

"},{"location":"tutorial_tam.html#results","title":"Results","text":""},{"location":"tutorial_text-generation.html","title":"Tutorial - text-generation-webui","text":"

Interact with a local AI assistant by running a LLM with oobabooga's text-generaton-webui on NVIDIA Jetson!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)\u26a0\ufe0f1

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.2GB for container image
    • Spaces for models
"},{"location":"tutorial_text-generation.html#set-up-a-container-for-text-generation-webui","title":"Set up a container for text-generation-webui","text":"

The jetson-containers project provides pre-built Docker images for text-generation-webui along with all of the loader API's built with CUDA enabled (llama.cpp, ExLlama, AutoGPTQ, Transformers, ect). You can clone the repo to use its utilities that will automatically pull/start the correct container for you, or you can do it manually.

git clone --depth=1 https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n

Info

JetsonHacks provides an informative walkthrough video on jetson-containers, showcasing the usage of both the stable-diffusion-webui and text-generation-webui containers. You can find the complete article with detailed instructions here.

"},{"location":"tutorial_text-generation.html#how-to-start","title":"How to start","text":"

If you are running this for the first time, go through the pre-setup and see the jetson-containers/text-generation-webui container readme.

Use run.sh and autotag script to automatically pull or build a compatible container image:

cd jetson-containers\n./run.sh $(./autotag text-generation-webui)\n

The container has a default run command (CMD) that will automatically start the webserver like this:

cd /opt/text-generation-webui && python3 server.py \\\n  --model-dir=/data/models/text-generation-webui \\\n  --chat \\\n  --listen\n

Open your browser and access http://<IP_ADDRESS>:7860.

"},{"location":"tutorial_text-generation.html#download-a-model-on-web-ui","title":"Download a model on web UI","text":"

See the oobabooga documentation for instructions for downloading models - either from within the web UI, or using download-model.py

./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) /bin/bash -c \\\n'python3 download-model.py --output=/data/models/text-generation-webui TheBloke/Llama-2-7b-Chat-GPTQ'\n

From within the web UI, select Model tab and navigate to \"Download model or LoRA\" section.

You can find text generation models on Hugging Face Hub, then enter the Hugging Face username/model path (which you can have copied to your clipboard from the Hub). Then click the Download button.

"},{"location":"tutorial_text-generation.html#gguf-models","title":"GGUF models","text":"

The fastest oobabooga model loader to use is currently llama.cpp with 4-bit quantized GGUF models.

You can download a single model file for a particular quantization, like *.Q4_K_M.bin. Input the file name and hit Download button.

Model Quantization Memory (MB) TheBloke/Llama-2-7b-Chat-GGUF llama-2-7b-chat.Q4_K_M.gguf 5,268 TheBloke/Llama-2-13B-chat-GGUF llama-2-13b-chat.Q4_K_M.gguf 8,609 TheBloke/LLaMA-30b-GGUF llama-30b.Q4_K_S.gguf 19,045 TheBloke/Llama-2-70B-chat-GGUF llama-2-70b-chat.Q4_K_M.gguf 37,655

Info

"},{"location":"tutorial_text-generation.html#model-selection-for-jetson-orin-nano","title":"Model selection for Jetson Orin Nano","text":"

Jetson Orin Nano Developer Kit has only 8GB RAM for both CPU (system) and GPU, so you need to pick a model that fits in the RAM size - see the Model Size section below. The 7B models with 4-bit quantization are the ones to use on Jetson Orin Nano. Make sure you go through the RAM optimization steps before attempting to load such model on Jetson Orin Nano.

"},{"location":"tutorial_text-generation.html#load-a-model","title":"Load a model","text":"

After you have downloaded a model, click the \ud83d\udd04 button to refresh your model list, and select the model you want to use.

For a GGUF model, remember to

  • Set n-gpu-layers to 128
  • Set n_gqa to 8 if you using Llama-2-70B (on Jetson AGX Orin 64GB)

Then click the Load button.

"},{"location":"tutorial_text-generation.html#chat-template","title":"Chat Template","text":"

If you're using a Llama model fine-tuned for chat, like the models listed above (except for LLaMA-30b), you need to use the oobabooga Instruct mode and set the template. On the Parameters tab, go to the Instruction Template sub-tab, then select Llama-v2 from the Instruction Template drop-down (or Vicuna, Guanaco, ect if you are using one of those models)

For the base text completion models (like LLaMA-30b), use the Default or Notebook tab.

Selecting the right chat template will make sure the model is being prompted correctly - you can also change the system prompt in the Context box to alter the agent's personality and behavior. There are a lot of other settings under the Generation tab, like the maximum length it should output per reply, and token sampling parameters like temperature and top_p for controlling randomness.

Then change back to the Chat tab, and under the mode section, make sure Instruct is selected (confusingly, not chat mode). Then you can start chatting with the LLM!

"},{"location":"tutorial_text-generation.html#results","title":"Results","text":""},{"location":"tutorial_text-generation.html#things-to-do-with-your-llm","title":"Things to do with your LLM","text":"

Here are some common test prompts for coding, math, history ect. You can also ask it about geography, travel, nature, recipies, fixing things, general life advice, and practically everything else. Also Llama-2 is quite playful and likes to play games to test its logic abilities!

>> What games do you like to play?\n\nI'm a large language model, so I can play text-based games and answer questions on a wide variety of topics. Here are some game ideas:\n\n- 20 Questions:  You or I can think of an object, and the other player tries to guess what it is by asking up to 20 yes-or-no questions.  The goal is to guess the object in as few questions as possible.\n- Hangman: I can think of a word or phrase and you try to guess it by suggesting letters. Each incorrect guess will bring the hangman one step closer to being complete!\n- Word association: I'll give you a word and you have to come up with a word that is related to it. We can keep playing back and forth as long as you'd like!\n- Trivia: I can provide questions on a wide range of topics, from history to science to pop culture. See how many questions you can answer correctly!\n- Storytelling: I can start telling a story and then stop at a cliffhanger. You can then try to guess what happens next or even take over the storytelling and continue it in your own\n- Jokes: I love to tell jokes and make people laugh with my \"Dad humor\"!  Knock knock!  *giggles*\n
"},{"location":"tutorial_text-generation.html#model-size-tested","title":"Model size tested","text":"

With llama.cpp, GGUF model, 4-bit quantization:

Model size Jetson AGX Orin 64GB Jetson AGX Orin 32GB Jetson Orin Nano 8GB 70B model \u2705 30B model \u2705 \u2705 13B model \u2705 \u2705 7B model \u2705 \u2705 \u2705

Want to explore using Python APIs to run LLMs directly? See jetson-containers for its LLM related packages and containers.

  1. Limited to 7B model (4-bit quantized).\u00a0\u21a9

"},{"location":"tutorial_whisper.html","title":"Tutorial - Whisper","text":"

Let's run OpenAI's Whisper, pre-trained model for automatic speech recognition on Jetson!

What you need

  1. One of the following Jetson devices:

    Jetson AGX Orin (64GB) Jetson AGX Orin (32GB) Jetson Orin NX (16GB) Jetson Orin Nano (8GB)

  2. Running one of the following versions of JetPack:

    JetPack 5 (L4T r35.x) JetPack 6 (L4T r36.x)

  3. Sufficient storage space (preferably with NVMe SSD).

    • 6.1 GB for whisper container image
    • Space for checkpoints
"},{"location":"tutorial_whisper.html#clone-and-set-up-jetson-containers","title":"Clone and set up jetson-containers","text":"
git clone https://github.com/dusty-nv/jetson-containers\ncd jetson-containers\nsudo apt update; sudo apt install -y python3-pip\npip3 install -r requirements.txt\n
"},{"location":"tutorial_whisper.html#how-to-start","title":"How to start","text":"

Use run.sh and autotag script to automatically pull or build a compatible container image.

cd jetson-containers\n./run.sh $(./autotag whisper)\n

The container has a default run command (CMD) that will automatically start the Jupyter Lab server, with SSL enabled.

Open your browser and access https://<IP_ADDRESS>:8888.

Attention

Note it is https (not http).

HTTPS (SSL) connection is needed to allow ipywebrtc widget to have access to your microphone (for record-and-transcribe.ipynb).

You will see a warning message like this.

Press \"Advanced\" button and then click on \"Proceed to (unsafe)\" link to proceed to the Jupyter Lab web interface.

The default password for Jupyter Lab is nvidia.

"},{"location":"tutorial_whisper.html#run-jupyter-notebooks","title":"Run Jupyter notebooks","text":"

Whisper repo comes with demo Jupyter notebooks, which you can find under /notebooks/ directory.

jetson-containers also adds one convenient notebook (record-and-transcribe.ipynb) to record your audio sample on Jupyter notebook in order to run transcribe on your recorded audio.

"},{"location":"tutorial_whisper.html#record-and-transcribeipynb","title":"record-and-transcribe.ipynb","text":"

This notebook is to let you record your own audio sample using your PC's microphone and apply Whisper's medium model to transcribe the audio sample.

It uses Jupyter notebook/lab's ipywebrtc extension to record an audio sample on your web browser.

Attention

When you click the \u23fa botton, your web browser may show a pop-up to ask you to allow it to use your microphone. Be sure to allow the access.

Final check

Once done, if you click on the \"\u26a0 Not secure\" part in the URL bar, you should see something like this.

"},{"location":"tutorial_whisper.html#result","title":"Result","text":"

Once you go through all the steps, you should see the transcribe result in text like this.

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..0f8724ef --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..aa30c7b6 Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/tips_ram-optimization.html b/tips_ram-optimization.html new file mode 100644 index 00000000..fd0495bf --- /dev/null +++ b/tips_ram-optimization.html @@ -0,0 +1,1120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 🔖 Memory optimization - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

RAM Optimization

+

Running a LLM requires a huge RAM space.

+

Especially if you are on Jetson Orin Nano that only has 8GB of RAM, it is crucial to leave as much RAM space available for models.

+

Here we share a couple of ways to optimize the system RAM usage.

+

Disabling the Desktop GUI

+

If you use your Jetson remotely through SSH, you can disable the Ubuntu desktop GUI.
+This will free up extra memory that the window manager and desktop uses (around ~800MB for Unity/GNOME).

+

You can disable the desktop temporarily, run commands in the console, and then re-start the desktop when desired:

+
$ sudo init 3     # stop the desktop
+# log your user back into the console (Ctrl+Alt+F1, F2, ect)
+$ sudo init 5     # restart the desktop
+
+

If you wish to make this persistent across reboots, you can use the following commands to change the boot-up behavior:

+
    +
  • +

    To disable desktop on boot

    +
    sudo systemctl set-default multi-user.target
    +
    +
  • +
  • +

    To enable desktop on boot

    +
    sudo systemctl set-default graphical.target
    +
    +
  • +
+

Disabling misc services

+
sudo systemctl disable nvargus-daemon.service
+
+

Mounting Swap

+

If you're building containers or working with large models, it's advisable to mount SWAP (typically correlated with the amount of memory in the board). Run these commands to disable ZRAM and create a swap file:

+
+

If you have NVMe SSD storage available, it's preferred to allocate the swap file on the NVMe SSD.

+
+
sudo systemctl disable nvzramconfig
+sudo fallocate -l 16G /ssd/16GB.swap
+sudo mkswap /ssd/16GB.swap
+sudo swapon /ssd/16GB.swap
+
+

Then add the following line to the end of /etc/fstab to make the change persistent:

+
/ssd/16GB.swap  none  swap  sw 0  0
+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tips_ssd-docker.html b/tips_ssd-docker.html new file mode 100644 index 00000000..7ab0f35b --- /dev/null +++ b/tips_ssd-docker.html @@ -0,0 +1,1398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 🔖 SSD + Docker - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tips - SSD + Docker

+

Once you have your Jetson set up by flashing the latest Jetson Linux (L4T) BSP on it or by flashing the SD card with the whole JetPack image, before embarking on testing out all the great generative AI application using jetson-containers, you want to make sure you have a huge storage space for all the containers and the models you will download.

+

We are going to show how you can install SSD on your Jetson, and set it up for Docker.

+

SSD

+

Physical installation

+
    +
  1. Unplug power and any peripherals from the Jetson developer kit.
  2. +
  3. Physically install an NVMe SSD card on the carrier board of your Jetson developer kit, making sure to properly seat the connector and secure with the screw.
  4. +
  5. Reconnect any peripherals, and then reconnect the power supply to turn on the Jetson developer kit.
  6. +
  7. +

    Once the system is up, verify that your Jetson identifies a new memory controller on PCI bus:

    +
    lspci
    +
    +

    The output should look like the following:

    +
    0007:01:00.0 Non-Volatile memory controller: Marvell Technology Group Ltd. Device 1322 (rev 02)
    +
    +
  8. +
+

Format and set up auto-mount

+
    +
  1. +

    Run lsblk to find the device name.

    +
    lsblk
    +
    +

    The output should look like the following:

    +
    NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    +loop0          7:0    0    16M  1 loop 
    +mmcblk1      179:0    0  59.5G  0 disk 
    +├─mmcblk1p1  179:1    0    58G  0 part /
    +├─mmcblk1p2  179:2    0   128M  0 part 
    +├─mmcblk1p3  179:3    0   768K  0 part 
    +├─mmcblk1p4  179:4    0  31.6M  0 part 
    +├─mmcblk1p5  179:5    0   128M  0 part 
    +├─mmcblk1p6  179:6    0   768K  0 part 
    +├─mmcblk1p7  179:7    0  31.6M  0 part 
    +├─mmcblk1p8  179:8    0    80M  0 part 
    +├─mmcblk1p9  179:9    0   512K  0 part 
    +├─mmcblk1p10 179:10   0    64M  0 part 
    +├─mmcblk1p11 179:11   0    80M  0 part 
    +├─mmcblk1p12 179:12   0   512K  0 part 
    +├─mmcblk1p13 179:13   0    64M  0 part 
    +└─mmcblk1p14 179:14   0 879.5M  0 part 
    +zram0        251:0    0   1.8G  0 disk [SWAP]
    +zram1        251:1    0   1.8G  0 disk [SWAP]
    +zram2        251:2    0   1.8G  0 disk [SWAP]
    +zram3        251:3    0   1.8G  0 disk [SWAP]
    +nvme0n1      259:0    0 238.5G  0 disk 
    +
    +

    Identify the device corresponding to your SSD. In this case, it is nvme0n1.

    +
  2. +
  3. +

    Format the SSD, create a mount point, and mount it to the filesystem.

    +
    sudo mkfs.ext4 /dev/nvme0n1
    +
    +
    +

    You can choose any name for the mount point directory. We use /ssd here, but in jetson-containers' setup.md documentation, /mnt is used.

    +
    +
    sudo mkdir /ssd
    +
    +
    sudo mount /dev/nvme0n1 /ssd
    +
    +
  4. +
  5. +

    In order to ensure that the mount persists after boot, add an entry to the fstab file:

    +

    First, identify the UUID for your SSD:

    +
    lsblk -f
    +
    +

    Then, add a new entry to the fstab file:

    +
    sudo vi /etc/fstab
    +
    +

    Insert the following line, replacing the UUID with the value found from lsblk -f:

    +
    UUID=************-****-****-****-******** /ssd/ ext4 defaults 0 2
    +
    +
  6. +
  7. +

    Finally, change the ownership of the /ssd directory.

    +
    sudo chown ${USER}:${USER} /ssd
    +
    +
  8. +
+

Docker

+
    +
  1. +

    Install nvidia-container package.

    +
    +

    Note: If you used an NVIDIA-supplied SD card image to flash your SD card, all necessary JetPack components (including nvidia-containers) and Docker are already pre-installed, so this step can be skipped.

    +
    +
    sudo apt update
    +sudo apt install -y nvidia-container
    +
    +
    +

    JetPack 6.0 DP users

    +

    If you flash Jetson Linux (L4T) R36.2 (JetPack 6.0 DP) on your Jetson using SDK Manager, and install nvidia-container using apt, on JetPack 6.0 it no longer automatically installs Docker.

    +

    Therefore, you need to run the following to manually install Docker and set it up.

    +
    sudo apt update
    +sudo apt install -y nvidia-container curl
    +curl https://get.docker.com | sh && sudo systemctl --now enable docker
    +sudo nvidia-ctk runtime configure --runtime=docker
    +
    +
    +
  2. +
  3. +

    Restart the Docker service and add your user to the docker group, so that you don't need to use the command with sudo.

    +
    sudo systemctl restart docker
    +sudo usermod -aG docker $USER
    +newgrp docker
    +
    +
  4. +
  5. +

    Add default runtime in /etc/docker/daemon.json

    +
    sudo vi /etc/docker/daemon.json
    +
    +

    Insert the "default-runtime": "nvidia" line as following:

    +
    {
    +    "runtimes": {
    +        "nvidia": {
    +            "path": "nvidia-container-runtime",
    +            "runtimeArgs": []
    +        }
    +    },
    +    "default-runtime": "nvidia"
    +}
    +
    +
  6. +
  7. +

    Restart Docker

    +
    sudo systemctl daemon-reload && sudo systemctl restart docker
    +
    +
  8. +
+

Migrate Docker directory to SSD

+

Now that the SSD is installed and available on your device, you can use the extra storage capacity to hold the storage-demanding Docker directory.

+
    +
  1. +

    Stop the Docker service.

    +
    sudo systemctl stop docker
    +
    +
  2. +
  3. +

    Move the existing Docker folder

    +
    sudo du -csh /var/lib/docker/ && \
    +    sudo mkdir /ssd/docker && \
    +    sudo rsync -axPS /var/lib/docker/ /ssd/docker/ && \
    +    sudo du -csh  /ssd/docker/ 
    +
    +
  4. +
  5. +

    Edit /etc/docker/daemon.json

    +
    sudo vi /etc/docker/daemon.json
    +
    +

    Insert "data-root" line like the following.

    +
    {
    +    "runtimes": {
    +        "nvidia": {
    +            "path": "nvidia-container-runtime",
    +            "runtimeArgs": []
    +        }
    +    },
    +    "default-runtime": "nvidia",
    +    "data-root": "/ssd/docker"
    +}
    +
    +
  6. +
  7. +

    Rename the old Docker data directory

    +
    sudo mv /var/lib/docker /var/lib/docker.old
    +
    +
  8. +
  9. +

    Restart the docker daemon

    +
    sudo systemctl daemon-reload && \
    +    sudo systemctl restart docker && \
    +    sudo journalctl -u docker
    +
    +
  10. +
+

Test Docker on SSD

+
    +
  1. +

    [Terminal 1] First, open a terminal to monitor the disk usage while pulling a Docker image.

    +
    watch -n1 df 
    +
    +
  2. +
  3. +

    [Terminal 2] Next, open a new terminal and start Docker pull.

    +
    docker pull nvcr.io/nvidia/l4t-base:r35.2.1
    +
    +
  4. +
  5. +

    [Terminal 1] Observe that the disk usage on /ssd goes up as the container image is downloaded and extracted.

    +
    ~$ docker image ls
    +REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
    +nvcr.io/nvidia/l4t-base     r35.2.1   dc07eb476a1d   7 months ago   713MB
    +
    +
  6. +
+

Final Verification

+

Reboot your Jetson, and verify that you observe the following:

+
~$ sudo blkid | grep nvme
+/dev/nvme0n1: UUID="9fc06de1-7cf3-43e2-928a-53a9c03fc5d8" TYPE="ext4"
+
+~$ df -h
+Filesystem      Size  Used Avail Use% Mounted on
+/dev/mmcblk1p1  116G   18G   94G  16% /
+none            3.5G     0  3.5G   0% /dev
+tmpfs           3.6G  108K  3.6G   1% /dev/shm
+tmpfs           734M   35M  699M   5% /run
+tmpfs           5.0M  4.0K  5.0M   1% /run/lock
+tmpfs           3.6G     0  3.6G   0% /sys/fs/cgroup
+tmpfs           734M   88K  734M   1% /run/user/1000
+/dev/nvme0n1    458G  824M  434G   1% /ssd
+
+~$ docker info | grep Root
+ Docker Root Dir: /ssd/docker
+
+~$ sudo ls -l /ssd/docker/
+total 44
+drwx--x--x  4 root root 4096 Mar 22 11:44 buildkit
+drwx--x---  2 root root 4096 Mar 22 11:44 containers
+drwx------  3 root root 4096 Mar 22 11:44 image
+drwxr-x---  3 root root 4096 Mar 22 11:44 network
+drwx--x--- 13 root root 4096 Mar 22 16:20 overlay2
+drwx------  4 root root 4096 Mar 22 11:44 plugins
+drwx------  2 root root 4096 Mar 22 16:19 runtimes
+drwx------  2 root root 4096 Mar 22 11:44 swarm
+drwx------  2 root root 4096 Mar 22 16:20 tmp
+drwx------  2 root root 4096 Mar 22 11:44 trust
+drwx-----x  2 root root 4096 Mar 22 16:19 volumes
+
+~$ sudo du -chs /ssd/docker/
+752M    /ssd/docker/
+752M    total
+
+~$ docker info | grep -e "Runtime" -e "Root"
+ Runtimes: io.containerd.runtime.v1.linux nvidia runc io.containerd.runc.v2
+ Default Runtime: nvidia
+ Docker Root Dir: /ssd/docker
+
+

Your Jetson is now set up with the SSD!

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/try.html b/try.html new file mode 100644 index 00000000..0c7b054d --- /dev/null +++ b/try.html @@ -0,0 +1,1005 @@ + + + + + + + + + + + + + + + + + + + + + + + Try - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial-intro.html b/tutorial-intro.html new file mode 100644 index 00000000..54d07583 --- /dev/null +++ b/tutorial-intro.html @@ -0,0 +1,1365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Introduction - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - Introduction

+

Overview

+

Our tutorials are divided into categories roughly based on model modality, the type of data to be processed or generated.

+

Text (LLM)

+ + + + + + + + + + + + + + + + + +
text-generation-webuiInteract with a local AI assistant by running a LLM with oobabooga's text-generaton-webui
llamaspeakTalk live with Llama using Riva ASR/TTS, and chat about images with Llava!
+

Text + Vision (VLM)

+

Give your locally running LLM an access to vision!

+ + + + + + + + + + + + + + + + + +
Mini-GPT4Mini-GPT4, an open-source model that demonstrate vision-language capabilities.
LLaVALarge Language and Vision Assistant, multimodal model that combines a vision encoder and Vicuna LLM for general-purpose visual and language understanding.
+

Image Generation

+ + + + + + + + + + + + + + + + + +
Stable DiffusionRun AUTOMATIC1111's stable-diffusion-webui to generate images from prompts
Stable Diffusion XLA newer ensemble pipeline consisting of a base model and refiner that results in significantly enhanced and detailed image generation capabilities.
+

Vision Transformers (ViT)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EfficientVITMIT Han Lab's EfficientViT, Multi-Scale Linear Attention for High-Resolution Dense Prediction
NanoSAMNanoSAM, SAM model variant capable of running in real-time on Jetson
NanoOWLOWL-ViT optimized to run real-time on Jetson with NVIDIA TensorRT
SAMMeta's SAM, Segment Anything model
TAMTAM, Track-Anything model, is an interactive tool for video object tracking and segmentation
+

Vector Database

+ + + + + + + + + + + + + +
NanoDBInteractive demo to witness the impact of Vector Database that handles multimodal data
+

Audio

+ + + + + + + + + + + + + + + + + +
AudioCraftMeta's AudioCraft, to produce high-quality audio and music
WhisperOpenAI's Whisper, pre-trained model for automatic speech recognition (ASR)
+

Tips

+ + + + + + + + + + + + + + + + + + + + + +
Knowledge Distillation
SSD + Docker
Memory optimization
+

About NVIDIA Jetson

+
+

Note

+

We are mainly targeting Jetson Orin generation devices for deploying the latest LLMs and generative AI models.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jetson AGX Orin 64GB Developer KitJetson AGX Orin Developer KitJetson Orin Nano Developer Kit


GPU2048-core NVIDIA Ampere architecture GPU with 64 Tensor Cores1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores
RAM
(CPU+GPU)
64GB32GB8GB
Storage64GB eMMC (+ NVMe SSD)microSD card (+ NVMe SSD)
+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_audiocraft.html b/tutorial_audiocraft.html new file mode 100644 index 00000000..048d6eed --- /dev/null +++ b/tutorial_audiocraft.html @@ -0,0 +1,1190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + AudioCraft 🆕 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - AudioCraft

+

Let's run Meta's AudioCraft, to produce high-quality audio and music on Jetson!

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 10.7 GB for audiocraft container image
    • +
    • Space for checkpoints
    • +
    +
  6. +
+
+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag audiocraft)
+
+

The container has a default run command (CMD) that will automatically start the Jupyter Lab server.

+

Open your browser and access http://<IP_ADDRESS>:8888.

+
+

The default password for Jupyter Lab is nvidia.

+
+

Run Jupyter notebooks

+

AudioCraft repo comes with demo Jupyter notebooks.

+

On Jupyter Lab navigation pane on the left, double-click demos folder.

+

+

AudioGen demo

+

For "Text-conditional Generation", you should get something like this.

+

+
+

Info

+

You may encounter an error message like the following when executing the first cell, but you can keep going. +

A matching Triton is not available, some optimizations will not be enabled.
+Error caught was: No module named 'triton'
+

+
+
+

Warning

+

When running the 5-th cell of audiogen_demo.ipynb, you may run into "Failed to load audio" RuntimeError.

+
+

MusicGen demo

+

For "Text-conditional Generation", you should get something like this.

+

+
+

Warning

+

When running the 5-th cell of musicgen_demo.ipynb, you may run into "Failed to load audio" RuntimeError.

+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_distillation.html b/tutorial_distillation.html new file mode 100644 index 00000000..69013296 --- /dev/null +++ b/tutorial_distillation.html @@ -0,0 +1,1008 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 📑 Knowledge Distillation - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+ +
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_efficientvit.html b/tutorial_efficientvit.html new file mode 100644 index 00000000..ab5755f5 --- /dev/null +++ b/tutorial_efficientvit.html @@ -0,0 +1,1213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + EfficientViT 🆕 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - EfficientViT

+

Let's run MIT Han Lab's EfficientViT on Jetson!

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 10.9 GB for efficientvit container image
    • +
    • Space for checkpoints
    • +
    +
  6. +
+
+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag efficientvit)
+
+

Usage of EfficientViT

+

The official EfficientViT repo shows the complete usage information.

+

https://github.com/mit-han-lab/efficientvit#usage

+

Run example/benchmark

+

Inside the container, a small benchmark script benchmark.py is added under /opt/efficientvit directory by the jetson-container build process.

+

It is to test EfficientViT-L2-SAM in bounding box mode, so we can use this as an example and verify the output.

+

Download l2.pt model

+
mkdir -p /data/models/efficientvit/sam/
+cd /data/models/efficientvit/sam/
+wget https://huggingface.co/han-cai/efficientvit-sam/resolve/main/l2.pt
+
+
+

The downloaded checkpoint file is stored on the /data/ directory that is mounted from the Docker host.

+
+

Run benchmark script

+
cd /opt/efficientvit
+python3 ./benchmark.py
+
+

At the end you should see a summary like the following.

+
AVERAGE of 2 runs:
+  encoder --- 0.062 sec
+  latency --- 0.083 sec
+Memory consumption :  3419.68 MB
+
+

Check the output/result

+

The output image file (of the last inference result) is stored as /data/benchmarks/efficientvit_sam_demo.png.

+

It is stored under /data/ directory that is mounted from the Docker host.
+So you can go back to your host machine, and check ./jetson-containers/data/benchmark/ directory.

+

You should find the output like this.

+

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_llamaspeak.html b/tutorial_llamaspeak.html new file mode 100644 index 00000000..2b1ba10f --- /dev/null +++ b/tutorial_llamaspeak.html @@ -0,0 +1,1018 @@ + + + + + + + + + + + + + + + + + + + + + + + + + llamaspeak 🆕 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - llamaspeak

+

Talk live with Llama using Riva ASR/TTS, and chat about images with Llava!

+

+
    +
  • llamaspeak:v1 - uses text-generation-webui loaders for LLM models (llama.cpp, exllama, AutoGPTQ, Transformers)
  • +
  • llamaspeak:v2 - uses AWQ/MLC from local_llm package, web chat voice agent
  • +
+

llamaspeak v2 has multimodal support for chatting about images with quantized Llava-1.5:

+

+
+

Multimodal Voice Chat with LLaVA-1.5 13B on NVIDIA Jetson AGX Orin (container: local_llm)

+
+

See the Voice Chat section of the local_llm documentation to run llamaspeak v2.

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_llava.html b/tutorial_llava.html new file mode 100644 index 00000000..3ef4b64d --- /dev/null +++ b/tutorial_llava.html @@ -0,0 +1,1317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + LLaVA - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

Tutorial - LLaVA

+

LLaVA is a leading multimodal vision/language model that you can run locally on Jetson to answer questions about image prompts and queries. Internally, it uses the CLIP vision encoder to transform images into a common embedding space that the LLM (which is the same as Llama architecture) can understand with text. Below we will cover a few methods to Llava on Jetson, some with quantization for improved performance:

+
    +
  1. Chat with Llava using text-generation-webui
  2. +
  3. Run from the terminal with llava.serve.cli
  4. +
+

+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

1. Chat with Llava using text-generation-webui

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.2GB for text-generation-webui container image
    • +
    • Space for models
        +
      • CLIP model : 1.7GB
      • +
      • Llava-v1.5-13B-GPTQ model : 7.25GB
      • +
      +
    • +
    +
  6. +
+
+

The oobabooga chat UI from the LLM tutorial has a multimodal extension for Llava, and it supports 4-bit quantization using AutoGPTQ. If you already used text-generation-webui before 12/2023, do sudo docker pull $(./autotag text-generation-webui) to update to the latest container.

+

Download Model

+
./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) \
+  python3 download-model.py --output=/data/models/text-generation-webui \
+    TheBloke/llava-v1.5-13B-GPTQ
+
+

Start Web UI with Multimodal Extension

+
./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) \
+  python3 server.py --listen \
+    --model-dir /data/models/text-generation-webui \
+    --model TheBloke_llava-v1.5-13B-GPTQ \
+    --multimodal-pipeline llava-v1.5-13b \
+    --loader autogptq \
+    --disable_exllama \
+    --verbose
+
+

Go to Chat tab, drag and drop an image of your choice into the Drop Image Here area, and your question in the text area above and hit Generate.

+

+

Result

+

+

2. Run from the terminal with llava.serve.cli

+
+

What you need

+
    +
  1. +

    One of the following Jetson:

    +

    Jetson AGX Orin 64GB +Jetson AGX Orin (32GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.1GB for llava container image
    • +
    • Space for models
        +
      • 7B model : 14GB, or
      • +
      • 13B model : 26GB
      • +
      +
    • +
    +
  6. +
+
+

This example uses the upstream Llava codebase to run the original, unquantized Llava models from the command-line. As such, it uses more memory due to using FP16 precision, and is provided mostly as a reference for debugging. See the Llava container readme for more infomation.

+

llava-v1.5-7b

+
./run.sh $(./autotag llava) \
+  python3 -m llava.serve.cli \
+    --model-path liuhaotian/llava-v1.5-7b \
+    --image-file /data/images/hoover.jpg
+
+

llava-v1.5-13b

+

./run.sh $(./autotag llava) \
+  python3 -m llava.serve.cli \
+    --model-path liuhaotian/llava-v1.5-13b \
+    --image-file /data/images/hoover.jpg
+
+This may run only on Jetson AGX Orin 64GB due to memory requirements.

+ + + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_minigpt4.html b/tutorial_minigpt4.html new file mode 100644 index 00000000..cf796267 --- /dev/null +++ b/tutorial_minigpt4.html @@ -0,0 +1,1152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Mini-GPT4 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - MiniGPT-4

+

Give your locally running LLM an access to vision, by running MiniGPT-4 on Jetson!

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    + +
  6. +
+
+

Set up a container for MiniGPT-4

+
+

See jetson-containers' minigpt4 package README for more infomation**

+
+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

Start minigpt4 container with models

+

To start the MiniGPT4 container and webserver with the recommended models, run this command:

+
cd jetson-containers
+./run.sh $(./autotag minigpt4) /bin/bash -c 'cd /opt/minigpt4.cpp/minigpt4 && python3 webui.py \
+  $(huggingface-downloader --type=dataset maknee/minigpt4-13b-ggml/minigpt4-13B-f16.bin) \
+  $(huggingface-downloader --type=dataset maknee/ggml-vicuna-v0-quantized/ggml-vicuna-13B-v0-q5_k.bin)'
+
+

Then, open your web browser and access http://<IP_ADDRESS>:7860.

+

Results

+

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_nanodb.html b/tutorial_nanodb.html new file mode 100644 index 00000000..7f8c86bf --- /dev/null +++ b/tutorial_nanodb.html @@ -0,0 +1,1224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + NanoDB - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - NanoDB

+

Let's run NanoDB's interactive demo to witness the impact of Vector Database that handles multimodal data.

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 7.0GB for container image
    • +
    +
  6. +
+
+

Set up a container for nanodb

+

Clone jetson-containers

+
+

See jetson-containers' nanodb package README for more infomation**

+
+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Download your data

+

Just for an example, let's just use MS COCO dataset.

+
cd jetson-containers
+mkdir data/datasets/coco/
+cd data/datasets/coco
+wget http://images.cocodataset.org/zips/train2017.zip
+unzip train2017.zip
+
+

Indexing Data

+

First, we need to build the index by scanning your dataset directory.

+
cd jetson-containers
+./run.sh -v ${PWD}/data/datasets/coco:/my_dataset $(./autotag nanodb) \
+  python3 -m nanodb \
+    --scan /my_dataset \
+    --path /my_dataset/nanodb \
+    --autosave --validate 
+
+

This will take about 2 hours.

+

Once the database has loaded and completed any start-up operations , it will drop down to a > prompt from which the user can run search queries.
+You can quickly check the operation by typing your query on this prompt.

+
> a girl riding a horse
+
+* index=80110   /data/datasets/coco/2017/train2017/000000393735.jpg      similarity=0.29991915822029114
+* index=158747  /data/datasets/coco/2017/unlabeled2017/000000189708.jpg  similarity=0.29254037141799927
+* index=123846  /data/datasets/coco/2017/unlabeled2017/000000026239.jpg  similarity=0.292171448469162
+* index=127338  /data/datasets/coco/2017/unlabeled2017/000000042508.jpg  similarity=0.29118549823760986
+* index=77416   /data/datasets/coco/2017/train2017/000000380634.jpg      similarity=0.28964102268218994
+* index=51992   /data/datasets/coco/2017/train2017/000000256290.jpg      similarity=0.28929752111434937
+* index=228640  /data/datasets/coco/2017/unlabeled2017/000000520381.jpg  similarity=0.28642547130584717
+* index=104819  /data/datasets/coco/2017/train2017/000000515895.jpg      similarity=0.285491943359375
+
+

You can press Ctrl+C to exit from the app and the container.

+

Interactive web UI

+

Spin up the Gradio server.

+
cd jetson-containers
+./run.sh -v ${PWD}/data/datasets/coco:/my_dataset $(./autotag nanodb) \
+  python3 -m nanodb \
+    --path /my_dataset/nanodb \
+    --server --port=7860
+
+

You can use your PC (or any machine) that can access your Jetson via a network, and navigate your browser to http://<IP_ADDRESS>:7860

+

You can enter text search queries as well as drag/upload images.

+ + + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_nanoowl.html b/tutorial_nanoowl.html new file mode 100644 index 00000000..8aaa2390 --- /dev/null +++ b/tutorial_nanoowl.html @@ -0,0 +1,1181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + NanoOWL 🆕 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - NanoOWL

+

Let's run NanoOWL, OWL-ViT optimized to run real-time on Jetson with NVIDIA TensorRT.

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 7.2 GB for container image
    • +
    • Spaces for models
    • +
    +
  6. +
+
+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag nanoowl)
+
+

How to run the tree prediction (live camera) example

+
    +
  1. +

    Ensure you have a camera device connected

    +
    ls /dev/video*
    +
    +
    +

    If no video device is found, exit from the container and check if you can see a video device on the host side.

    +
    +
  2. +
  3. +

    Launch the demo +

    cd examples/tree_demo
    +python3 tree_demo.py ../../data/owl_image_encoder_patch32.engine
    +

    +
    +

    Info

    +

    If it fails to find or load the TensorRT engine file, build the TensorRT engine for the OWL-ViT vision encoder on your Jetson device.

    +
    python3 -m nanoowl.build_image_encoder_engine \
    +    data/owl_image_encoder_patch32.engine
    +
    +
    +
  4. +
  5. +

    Second, open your browser to http://<ip address>:7860

    +
  6. +
  7. +

    Type whatever prompt you like to see what works!

    +

    Here are some examples

    +
      +
    • Example: [a face [a nose, an eye, a mouth]]
    • +
    • Example: [a face (interested, yawning / bored)]
    • +
    • Example: (indoors, outdoors)
    • +
    +
  8. +
+

Result

+

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_nanosam.html b/tutorial_nanosam.html new file mode 100644 index 00000000..1083342d --- /dev/null +++ b/tutorial_nanosam.html @@ -0,0 +1,1177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + NanoSAM - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - NanoSAM

+

Let's run NVIDIA's NanoSAM to check out the performance gain by distillation.

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.3GB for container image
    • +
    • Spaces for models
    • +
    +
  6. +
+
+

Set up a container for nanosam

+

Clone jetson-containers

+
+

See jetson-containers' nanosam package README for more infomation**

+
+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag nanosam)
+
+

Run examples

+

Inside the container, you can move to /opt/nanosam directory, to go through all the examples demonstrated on the repo.

+
cd /opt/nanosam
+
+

To run the "Example 1 - Segment with bounding box":

+
python3 examples/basic_usage.py \
+    --image_encoder="data/resnet18_image_encoder.engine" \
+    --mask_decoder="data/mobile_sam_mask_decoder.engine"
+
+

The result is saved under /opt/nanosam/data/basic_usage_out.jpg.

+

To check on your host machine, you can copy that into /data directory of the container where that is mounted from the host.

+
cp data/basic_usage_out.jpg /data/
+
+

Then you can go to your host system, and find the file under the jetson_containers' data directory, like jetson_containers/data/basic_usage_out.jpg.

+

Results

+

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_sam.html b/tutorial_sam.html new file mode 100644 index 00000000..fda3eea7 --- /dev/null +++ b/tutorial_sam.html @@ -0,0 +1,1182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + SAM - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - SAM (Segment Anything)

+

Let's run Meta's SAM on NVIDIA Jetson.

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)⚠️1

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.8GB for container image
    • +
    • Spaces for models
    • +
    +
  6. +
+
+

Set up a container for sam

+

Clone jetson-containers

+
+

See jetson-containers' sam package README for more infomation**

+
+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag sam)
+
+

The container has a default run command (CMD) that will automatically start the Jupyter Lab server.

+

Open your browser and access http://<IP_ADDRESS>:8888.

+
+

The default password for Jupyter Lab is nvidia.

+
+

Run Jupyter notebook

+

In Jupyter Lab, navigate to notebooks and open automatic_mask_generator_example.py notebook.

+

Create a new cell at the top, insert the model download command below and run the cell.

+
!wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth
+
+

Then go through executing all the cells below Set-up.

+

Results

+

+
+
+
    +
  1. +

    The biggest vit_h (2.4GB) model may not ran due to OOM, but vit_l (1.1GB) runs on Jetson Orin Nano. 

    +
  2. +
+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_stable-diffusion-xl.html b/tutorial_stable-diffusion-xl.html new file mode 100644 index 00000000..6fdad013 --- /dev/null +++ b/tutorial_stable-diffusion-xl.html @@ -0,0 +1,1156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Stable Diffusion XL - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - Stable Diffusion XL

+

Stable Diffusion XL is a newer ensemble pipeline consisting of a base model and refiner that results in significantly enhanced and detailed image generation capabilities. All told, SDXL 1.0 has 6.6 billion model parameters, in comparison to 0.98 billion for the original SD 1.5 model.

+

a robot searching a database for images, nvidia green colors

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices (SDXL requires >= ~13GB memory)

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.8GB for container image
    • +
    • 12.4GB for SDXL models
    • +
    +
  6. +
  7. +

    Have followed the previous stable-diffusion-webui tutorial and have the webserver container running.

    +
  8. +
+
+

Downloading SDXL Models

+

Stable Diffusion XL is supported through AUTOMATIC1111's stable-diffusion-webui with some additional settings. First you need to download the SDXL models to your jetson-containers data directory (which is automatically mounted into the container)

+
# run these outside of container, and replace CONTAINERS_DIR with the path to the jetson-containers repo on your device
+CONTAINERS_DIR=/path/to/your/jetson-containers
+MODEL_DIR=$CONTAINERS_DIR/data/models/stable-diffusion/models/Stable-diffusion/
+
+sudo chown -R $USER $MODEL_DIR
+
+wget -P $MODEL_DIR https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
+wget -P $MODEL_DIR https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors
+
+
+

It's assumed that you already have the stable-diffusion-webui container and webserver running from the previous tutorial.

+
+

SDXL Settings

+

After the models have finished downloading, click the 🔄 button to refresh the model list in the web UI. Select sd_xl_base_1.0.safetensors from the Stable Diffusion checkpoint drop-down:

+

+

Then under the Generation tab, expand the Refiner section, and select sd_xl_refiner_1.0.safetensors from the drop-down:

+

+

Guidance on other relevant settings:

+
    +
  • Change the width/height to 1024x1024. SDXL works best at higher resolutions, and using 512x512 often results in more simplistic/cartoonish content. Changing image resolutions impacts the actual scene contents of the image, not just the details.
  • +
  • The refiner's Switch at setting dictates the step at which the refiner takes over from the base model. At this point, additional subject content will no longer be added to the scene, but rather its details further refined in the image.
  • +
  • Typical Sampling steps are between 20-40 and Switch at is between 0.7-0.9. This takes experimentation to find the best combination for the characteristics of your desired output.
  • +
  • Extensive negative prompts are not as necessary in the same way as SD 1.5 was (e.g. low quality, jpeg artifacts, blurry, ect)
  • +
  • CFG Scale controls how closely the model conforms to your prompt versus how creative it is.
  • +
+

When you get a good image, remember to save your random seed and settings so you can re-generate it later!

+

Results

+

+
+


+photograph of a friendly robot alongside a person climbing a mountain (seed 1576166644, steps 25, switch @ 0.8, cfg scale 15)

+
+
+


+a girl and a boy building a friendly robot in their basement workshop (seed 642273464, steps 25, switch @ 0.9, cfg scale 7)

+
+
+


+small friendly robots playing games with people, in a futuristic Tokyo central park gardens with cherry blossoms and water, coy fish swimming in the water, sunshine (seed 642273464, steps 40, switch @ 0.8, cfg scale 7)

+
+
+


+small friendly robots playing games with people in a futuristic New York City Central Park in autumn, water (seed 642273464, steps 25, switch @ 0.8, cfg scale 7)

+
+
+

Want to explore using Python APIs to run diffusion models directly? See jetson-containers/stable-diffusion.

+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_stable-diffusion.html b/tutorial_stable-diffusion.html new file mode 100644 index 00000000..384ec084 --- /dev/null +++ b/tutorial_stable-diffusion.html @@ -0,0 +1,1158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Stable Diffusion - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - Stable Diffusion

+

Let's run AUTOMATIC1111's stable-diffusion-webui on NVIDIA Jetson to generate images from our prompts!

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.8GB for container image
    • +
    • 4.1GB for SD 1.5 model
    • +
    +
  6. +
+
+

Set up a container for stable-diffusion-webui

+

The jetson-containers project provides pre-built Docker images for stable-diffusion-webui. You can clone the repo to use its utilities that will automatically pull/start the correct container for you, or you can do it manually.

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+
+

Info

+

JetsonHacks provides an informative walkthrough video on jetson-containers, showcasing the usage of both the stable-diffusion-webui and text-generation-webui containers. You can find the complete article with detailed instructions here.

+

+
+

How to start

+
+

If you are running this for the first time, go through the pre-setup and see the jetson-containers/stable-diffusion-webui readme.

+
+

Use run.sh and autotag script to automatically pull or build a compatible container image:

+
cd jetson-containers
+./run.sh $(./autotag stable-diffusion-webui)
+
+

The container has a default run command (CMD) that will automatically start the webserver like this:

+
cd /opt/stable-diffusion-webui && python3 launch.py \
+  --data=/data/models/stable-diffusion \
+  --enable-insecure-extension-access \
+  --xformers \
+  --listen \
+  --port=7860
+
+

You should see it downloading the model checkpoint on the first run.

+

Open your browser and access http://<IP_ADDRESS>:7860

+

Results / Output Examples

+

+

+

Stable Diffusion XL

+

To generate even higher-quality and detailed images, check out the next part of the tutorial that uses the latest Stable Diffusion XL models!

+
+

Want to explore using Python APIs to run diffusion models directly? See jetson-containers/stable-diffusion.

+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_tam.html b/tutorial_tam.html new file mode 100644 index 00000000..ca0a1e6c --- /dev/null +++ b/tutorial_tam.html @@ -0,0 +1,1170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + TAM - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - SAM (Segment Anything)

+

Let's run TAM to perform Segment Anything on videos on NVIDIA Jetson.

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.8GB for container image
    • +
    • Spaces for models
    • +
    +
  6. +
+
+

Set up a container for tam

+

Clone jetson-containers

+
+

See jetson-containers' tam package README for more infomation**

+
+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag tam)
+
+

The container has a default run command (CMD) that will automatically start TAM's web server.

+

Open your browser and access http://<IP_ADDRESS>:12212.

+

TAM web UI

+

Check out the official tutorial to learn how to operate the web UI.

+ + +

Results

+ + + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_text-generation.html b/tutorial_text-generation.html new file mode 100644 index 00000000..8fc91e4e --- /dev/null +++ b/tutorial_text-generation.html @@ -0,0 +1,1370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + text-generation-webui - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + +

Tutorial - text-generation-webui

+

Interact with a local AI assistant by running a LLM with oobabooga's text-generaton-webui on NVIDIA Jetson!

+

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)⚠️1

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.2GB for container image
    • +
    • Spaces for models
    • +
    +
  6. +
+
+

Set up a container for text-generation-webui

+

The jetson-containers project provides pre-built Docker images for text-generation-webui along with all of the loader API's built with CUDA enabled (llama.cpp, ExLlama, AutoGPTQ, Transformers, ect). You can clone the repo to use its utilities that will automatically pull/start the correct container for you, or you can do it manually.

+
git clone --depth=1 https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+
+

Info

+

JetsonHacks provides an informative walkthrough video on jetson-containers, showcasing the usage of both the stable-diffusion-webui and text-generation-webui containers. You can find the complete article with detailed instructions here.

+

+
+

How to start

+
+

If you are running this for the first time, go through the pre-setup and see the jetson-containers/text-generation-webui container readme.

+
+

Use run.sh and autotag script to automatically pull or build a compatible container image:

+
cd jetson-containers
+./run.sh $(./autotag text-generation-webui)
+
+

The container has a default run command (CMD) that will automatically start the webserver like this:

+
cd /opt/text-generation-webui && python3 server.py \
+  --model-dir=/data/models/text-generation-webui \
+  --chat \
+  --listen
+
+

Open your browser and access http://<IP_ADDRESS>:7860.

+

Download a model on web UI

+

See the oobabooga documentation for instructions for downloading models - either from within the web UI, or using download-model.py

+
./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) /bin/bash -c \
+  'python3 download-model.py --output=/data/models/text-generation-webui TheBloke/Llama-2-7b-Chat-GPTQ'
+
+

From within the web UI, select Model tab and navigate to "Download model or LoRA" section.

+

You can find text generation models on Hugging Face Hub, then enter the Hugging Face username/model path (which you can have copied to your clipboard from the Hub). Then click the Download button.

+

GGUF models

+

The fastest oobabooga model loader to use is currently llama.cpp with 4-bit quantized GGUF models.

+

You can download a single model file for a particular quantization, like *.Q4_K_M.bin. Input the file name and hit Download button.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModelQuantizationMemory (MB)
TheBloke/Llama-2-7b-Chat-GGUFllama-2-7b-chat.Q4_K_M.gguf5,268
TheBloke/Llama-2-13B-chat-GGUFllama-2-13b-chat.Q4_K_M.gguf8,609
TheBloke/LLaMA-30b-GGUFllama-30b.Q4_K_S.gguf19,045
TheBloke/Llama-2-70B-chat-GGUFllama-2-70b-chat.Q4_K_M.gguf37,655
+

+
+

Info

+

Model selection for Jetson Orin Nano

+

Jetson Orin Nano Developer Kit has only 8GB RAM for both CPU (system) and GPU, so you need to pick a model that fits in the RAM size - see the Model Size section below. The 7B models with 4-bit quantization are the ones to use on Jetson Orin Nano. Make sure you go through the RAM optimization steps before attempting to load such model on Jetson Orin Nano.

+
+

Load a model

+

After you have downloaded a model, click the 🔄 button to refresh your model list, and select the model you want to use.

+

For a GGUF model, remember to

+
    +
  • Set n-gpu-layers to 128
  • +
  • Set n_gqa to 8 if you using Llama-2-70B (on Jetson AGX Orin 64GB)
  • +
+

Then click the Load button.

+

Chat Template

+

If you're using a Llama model fine-tuned for chat, like the models listed above (except for LLaMA-30b), you need to use the oobabooga Instruct mode and set the template. On the Parameters tab, go to the Instruction Template sub-tab, then select Llama-v2 from the Instruction Template drop-down (or Vicuna, Guanaco, ect if you are using one of those models)

+
+

For the base text completion models (like LLaMA-30b), use the Default or Notebook tab.

+
+

Selecting the right chat template will make sure the model is being prompted correctly - you can also change the system prompt in the Context box to alter the agent's personality and behavior. There are a lot of other settings under the Generation tab, like the maximum length it should output per reply, and token sampling parameters like temperature and top_p for controlling randomness.

+

Then change back to the Chat tab, and under the mode section, make sure Instruct is selected (confusingly, not chat mode). Then you can start chatting with the LLM!

+

Results

+

+

Things to do with your LLM

+

Here are some common test prompts for coding, math, history ect. You can also ask it about geography, travel, nature, recipies, fixing things, general life advice, and practically everything else. Also Llama-2 is quite playful and likes to play games to test its logic abilities!

+
>> What games do you like to play?
+
+I'm a large language model, so I can play text-based games and answer questions on a wide variety of topics. Here are some game ideas:
+
+- 20 Questions:  You or I can think of an object, and the other player tries to guess what it is by asking up to 20 yes-or-no questions.  The goal is to guess the object in as few questions as possible.
+- Hangman: I can think of a word or phrase and you try to guess it by suggesting letters. Each incorrect guess will bring the hangman one step closer to being complete!
+- Word association: I'll give you a word and you have to come up with a word that is related to it. We can keep playing back and forth as long as you'd like!
+- Trivia: I can provide questions on a wide range of topics, from history to science to pop culture. See how many questions you can answer correctly!
+- Storytelling: I can start telling a story and then stop at a cliffhanger. You can then try to guess what happens next or even take over the storytelling and continue it in your own
+- Jokes: I love to tell jokes and make people laugh with my "Dad humor"!  Knock knock!  *giggles*
+
+

Model size tested

+

With llama.cpp, GGUF model, 4-bit quantization:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Model sizeJetson AGX Orin 64GBJetson AGX Orin 32GBJetson Orin Nano 8GB
70B model
30B model
13B model
7B model
+
+

Want to explore using Python APIs to run LLMs directly?
+See jetson-containers for its LLM related packages and containers.

+
+
+
+
    +
  1. +

    Limited to 7B model (4-bit quantized). 

    +
  2. +
+
+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/tutorial_whisper.html b/tutorial_whisper.html new file mode 100644 index 00000000..0e77547a --- /dev/null +++ b/tutorial_whisper.html @@ -0,0 +1,1203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Whisper 🆕 - NVIDIA Jetson Generative AI Lab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + +

Tutorial - Whisper

+

Let's run OpenAI's Whisper, pre-trained model for automatic speech recognition on Jetson!

+
+

What you need

+
    +
  1. +

    One of the following Jetson devices:

    +

    Jetson AGX Orin (64GB) +Jetson AGX Orin (32GB) +Jetson Orin NX (16GB) +Jetson Orin Nano (8GB)

    +
  2. +
  3. +

    Running one of the following versions of JetPack:

    +

    JetPack 5 (L4T r35.x) +JetPack 6 (L4T r36.x)

    +
  4. +
  5. +

    Sufficient storage space (preferably with NVMe SSD).

    +
      +
    • 6.1 GB for whisper container image
    • +
    • Space for checkpoints
    • +
    +
  6. +
+
+

Clone and set up jetson-containers

+
git clone https://github.com/dusty-nv/jetson-containers
+cd jetson-containers
+sudo apt update; sudo apt install -y python3-pip
+pip3 install -r requirements.txt
+
+

How to start

+

Use run.sh and autotag script to automatically pull or build a compatible container image.

+
cd jetson-containers
+./run.sh $(./autotag whisper)
+
+

The container has a default run command (CMD) that will automatically start the Jupyter Lab server, with SSL enabled.

+

Open your browser and access https://<IP_ADDRESS>:8888.

+
+

Attention

+

Note it is https (not http).

+

HTTPS (SSL) connection is needed to allow ipywebrtc widget to have access to your microphone (for record-and-transcribe.ipynb).

+
+

You will see a warning message like this.

+

+

Press "Advanced" button and then click on "Proceed to (unsafe)" link to proceed to the Jupyter Lab web interface.

+

+
+

The default password for Jupyter Lab is nvidia.

+
+

Run Jupyter notebooks

+

Whisper repo comes with demo Jupyter notebooks, which you can find under /notebooks/ directory.

+

jetson-containers also adds one convenient notebook (record-and-transcribe.ipynb) to record your audio sample on Jupyter notebook in order to run transcribe on your recorded audio.

+

+

record-and-transcribe.ipynb

+

This notebook is to let you record your own audio sample using your PC's microphone and apply Whisper's medium model to transcribe the audio sample.

+

It uses Jupyter notebook/lab's ipywebrtc extension to record an audio sample on your web browser.

+

+
+

Attention

+

When you click the ⏺ botton, your web browser may show a pop-up to ask you to allow it to use your microphone. Be sure to allow the access.

+

+
+Final check +

Once done, if you click on the "⚠ Not secure" part in the URL bar, you should see something like this.

+

+
+
+

Result

+

Once you go through all the steps, you should see the transcribe result in text like this.

+

+ + + + + + + + +
+
+ + + + +
+ + + +
+ +
+ + +
+ +
+
+
+
+ + + + + + + + + \ No newline at end of file