CoolFace
Apppublic

radames/OpenAI-CLIP-JavaScript

sourceHugging Faceupdated 3y agoView on Hugging Face
7likes
debug-onnx-several-image-sessions-at-once.html69 linesDownload Raw Back to root
1<!DOCTYPE html>2<html>3  <head>4    <meta charset="utf-8">5    <meta name="viewport" content="width=device-width">6    <title>ONNX Bug(?): Loading Several Image Model Sessions at Once</title>7  </head>8  <body>9    <style> body * { font-family: monospace; } </style>10    <script src="https://cdn.jsdelivr.net/npm/onnxruntime-web@1.10.0/dist/ort.js"></script>11    12    Choose number of sessions to create: <input id="numWorkersEl" type="range" min="1" max="10" value="8" oninput="numWorkersDisplayEl.textContent=this.value"> <span id="numWorkersDisplayEl"></span> <script>numWorkersEl.max = navigator.hardwareConcurrency; numWorkersDisplayEl.textContent=numWorkersEl.value;</script>13    <br>14    Downloading model: <progress id="imageModelLoadingProgressBarEl" value="0"></progress> <span id="imageModelLoadingMbEl"></span>15    <br>16    Number of initialized sessions so far: <span id="workerInitProgressEl"></span>17    <br>18    <button onclick="initializeWorkers()">click here to start</button>19    <br>20    (see browser console for errors)21    22    <script>23      let onnxImageSessions = [];24      async function initializeWorkers() {25        numWorkersEl.disabled = true;26 27        let imageOnnxBlob = await downloadBlobWithProgress('https://huggingface.co/rocca/openai-clip-js/resolve/main/clip-image-vit-32-float32.onnx', function(e) {28          let ratio = e.loaded / e.total;29          imageModelLoadingProgressBarEl.value = ratio;30          imageModelLoadingMbEl.innerHTML = Math.round(ratio*352)+" MB";31        });32 33        let imageModelUrl = window.URL.createObjectURL(imageOnnxBlob);34        35        let numImageWorkers = Number(numWorkersEl.value);36        37        ort.env.wasm.numThreads = 1;38        39        for(let i = 0; i < numImageWorkers; i++) {40          let session = await ort.InferenceSession.create(imageModelUrl, { executionProviders: ["wasm"] }); // webgl is not compatible with this model (need to tweak conversion data/op types)41          onnxImageSessions.push(session);42          workerInitProgressEl.innerHTML = i+1;43        }44 45        window.URL.revokeObjectURL(imageModelUrl);46        47        console.log("FINISHED");48      }49      50      function downloadBlobWithProgress(url, onProgress) {51        return new Promise((res, rej) => {52          var blob;53          var xhr = new XMLHttpRequest();54          xhr.open('GET', url, true);55          xhr.responseType = 'arraybuffer';56          xhr.onload = function(e) {57            blob = new Blob([this.response]);   58          };59          xhr.onprogress = onProgress;60          xhr.onloadend = function(e){61            res(blob);62          }63          xhr.send();64        });65      }66    </script>67  </body>68</html>69