দ্রুততর ওয়েব AI এর জন্য WebAssembly এবং WebGPU বর্ধিতকরণ, পার্ট 2

এই ডকুমেন্টটি হল ওয়েব অ্যাসেম্বলি এবং ওয়েবজিপিইউ বর্ধিতকরণের একটি ধারাবাহিকতা দ্রুততর ওয়েব এআই, পার্ট 1 । আমরা আপনাকে এই পোস্টটি পড়ার পরামর্শ দিচ্ছি বা চালিয়ে যাওয়ার আগে IO 24 এ আলোচনাটি দেখুন

অস্টিন ইঞ্জি
Austin Eng
দীপ্তি গন্ডলুরি
Deepti Gandluri
ফ্রাঁসোয়া বিউফোর্ট
François Beaufort

ওয়েবজিপিইউ

WebGPU দক্ষ, উচ্চ-সমান্তরাল গণনা সম্পাদন করতে ক্লায়েন্টের GPU হার্ডওয়্যারে ওয়েব অ্যাপ্লিকেশনগুলিকে অ্যাক্সেস দেয়। Chrome-এ WebGPU চালু করার পর থেকে, আমরা ওয়েবে কৃত্রিম বুদ্ধিমত্তা (AI) এবং মেশিন লার্নিং (ML) এর অবিশ্বাস্য ডেমো দেখেছি।

উদাহরণস্বরূপ, ওয়েব স্টেবল ডিফিউশন দেখিয়েছে যে সরাসরি ব্রাউজারে টেক্সট থেকে ইমেজ তৈরি করতে AI ব্যবহার করা সম্ভব। এই বছরের শুরুর দিকে, Google এর নিজস্ব Mediapipe টিম বৃহৎ ভাষা মডেল অনুমানের জন্য পরীক্ষামূলক সমর্থন প্রকাশ করেছে।

নিচের অ্যানিমেশনটি Gemma , Google-এর ওপেন সোর্স লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) দেখায়, যা সম্পূর্ণরূপে Chrome-এ ডিভাইসে চলে, বাস্তব সময়ে৷

মেটার সেগমেন্ট এনিথিং মডেলের নিম্নলিখিত আলিঙ্গন মুখের ডেমোটি সম্পূর্ণরূপে ক্লায়েন্টের উপর উচ্চ মানের অবজেক্ট মাস্ক তৈরি করে।

এগুলি কয়েকটি আশ্চর্যজনক প্রকল্প যা AI এবং ML-এর জন্য WebGPU-এর শক্তি প্রদর্শন করে৷ WebGPU এই মডেলগুলি এবং অন্যদেরকে CPU-তে যতটা সম্ভব তার চেয়ে উল্লেখযোগ্যভাবে দ্রুত চালানোর অনুমতি দেয়।

টেক্সট এম্বেডিংয়ের জন্য হাগিং ফেসের ওয়েবজিপিইউ বেঞ্চমার্ক একই মডেলের একটি সিপিইউ বাস্তবায়নের তুলনায় অসাধারণ গতি প্রদর্শন করে। একটি Apple M1 Max ল্যাপটপে, WebGPU 30 গুণ বেশি দ্রুত ছিল। অন্যরা রিপোর্ট করেছেন যে WebGPU বেঞ্চমার্ককে 120 গুণের বেশি ত্বরান্বিত করে।

AI এবং ML এর জন্য WebGPU বৈশিষ্ট্য উন্নত করা

WebGPU AI এবং ML মডেলগুলির জন্য দুর্দান্ত, যার বিলিয়ন প্যারামিটার থাকতে পারে, কম্পিউট শেডারগুলির সমর্থনের জন্য ধন্যবাদ৷ কম্পিউট শেডারগুলি GPU-তে চলে এবং বৃহৎ পরিমাণ ডেটাতে সমান্তরাল অ্যারে অপারেশন চালাতে সাহায্য করে।

গত বছরে WebGPU-তে অসংখ্য উন্নতির মধ্যে, আমরা ওয়েবে ML এবং AI পারফরম্যান্স উন্নত করার জন্য আরও ক্ষমতা যোগ করা অব্যাহত রেখেছি। সম্প্রতি, আমরা দুটি নতুন বৈশিষ্ট্য চালু করেছি: 16-বিট ফ্লোটিং পয়েন্ট এবং প্যাকড ইন্টিজার ডট পণ্য।

16-বিট ফ্লোটিং পয়েন্ট

মনে রাখবেন, এমএল ওয়ার্কলোডের নির্ভুলতার প্রয়োজন হয় নাshader-f16 হল একটি বৈশিষ্ট্য যা ওয়েবজিপিইউ শেডিং ভাষায় f16 টাইপ ব্যবহার করতে সক্ষম করে। এই ফ্লোটিং পয়েন্ট টাইপ স্বাভাবিক 32 বিটের পরিবর্তে 16 বিট নেয়। f16 এর একটি ছোট পরিসর রয়েছে এবং এটি কম সুনির্দিষ্ট, তবে অনেক ML মডেলের জন্য এটি যথেষ্ট।

এই বৈশিষ্ট্যটি কয়েকটি উপায়ে দক্ষতা বাড়ায়:

  • হ্রাসকৃত মেমরি : f16 উপাদান সহ টেনসরগুলি অর্ধেক স্থান নেয়, যা অর্ধেক মেমরির ব্যবহারকে হ্রাস করে। জিপিইউ কম্পিউটেশনগুলি প্রায়ই মেমরি ব্যান্ডউইথের উপর বাধাগ্রস্ত হয়, তাই অর্ধেক মেমরি প্রায়শই শেডারগুলিকে দ্বিগুণ দ্রুত চালানোর অর্থ হতে পারে। প্রযুক্তিগতভাবে, মেমরি ব্যান্ডউইথ সংরক্ষণ করতে আপনার f16 এর প্রয়োজন নেই। কম-নির্ভুলতা বিন্যাসে ডেটা সংরক্ষণ করা সম্ভব, এবং তারপর গণনার জন্য শেডারে এটিকে সম্পূর্ণ f32-এ প্রসারিত করুন। কিন্তু, GPU ডেটা প্যাক এবং আনপ্যাক করতে অতিরিক্ত কম্পিউটিং শক্তি ব্যয় করে।

  • হ্রাসকৃত ডেটা রূপান্তর : f16 ডেটা রূপান্তর হ্রাস করে কম গণনা ব্যবহার করে। কম নির্ভুলতা ডেটা সংরক্ষণ করা যেতে পারে এবং তারপরে রূপান্তর ছাড়াই সরাসরি ব্যবহার করা যেতে পারে।

  • বর্ধিত সমান্তরালতা : আধুনিক জিপিইউগুলি জিপিইউ-এর এক্সিকিউশন ইউনিটগুলিতে একই সাথে আরও মান ফিট করতে সক্ষম, এটিকে আরও বেশি সংখ্যক সমান্তরাল গণনা করতে দেয়। উদাহরণস্বরূপ, একটি জিপিইউ যা প্রতি সেকেন্ডে 5 ট্রিলিয়ন f32 ফ্লোটিং-পয়েন্ট অপারেশন সমর্থন করে প্রতি সেকেন্ডে 10 ট্রিলিয়ন f16 ফ্লোটিং-পয়েন্ট অপারেশন সমর্থন করতে পারে।

টেক্সট এম্বেডিংয়ের জন্য WebGPU বেঞ্চমার্কের স্ক্রিনশট
shader-f16 এর সাথে, টেক্সট এম্বেডিং বেঞ্চমার্কের জন্য Hugging Face-এর WebGPU বেঞ্চমার্ক Apple M1 Max ল্যাপটপে f32 এর চেয়ে 3 গুণ দ্রুত বেঞ্চমার্ক চালায়।

WebLLM হল একটি প্রকল্প যা একাধিক বড় ভাষার মডেল চালাতে পারে। এটি Apache TVM ব্যবহার করে, একটি ওপেন সোর্স মেশিন লার্নিং কম্পাইলার ফ্রেমওয়ার্ক।

আমি WebLLM কে Llama 3 আট-বিলিয়ন প্যারামিটার মডেল ব্যবহার করে প্যারিস ভ্রমণের পরিকল্পনা করতে বলেছি। ফলাফলগুলি দেখায় যে মডেলের প্রিফিল পর্বের সময়, f16 f32 এর চেয়ে 2.1 গুণ দ্রুত। ডিকোড পর্বের সময়, এটি 1.3 গুণ বেশি দ্রুত।

অ্যাপ্লিকেশনগুলিকে প্রথমে নিশ্চিত করতে হবে যে GPU অ্যাডাপ্টারটি f16 সমর্থন করে এবং এটি উপলব্ধ থাকলে, একটি GPU ডিভাইসের অনুরোধ করার সময় স্পষ্টভাবে এটি সক্ষম করুন৷ যদি f16 সমর্থিত না হয়, আপনি requiredFeatures অ্যারেতে এটির অনুরোধ করতে পারবেন না।

// main.js

const adapter = await navigator.gpu.requestAdapter();
const supportsF16 = adapter.features.has('shader-f16');
if (supportsF16) {
  // Use f16.
  const device = await adapter.requestDevice({
    requiredFeatures: ['shader-f16'],
  });
  initApp(device);
}

তারপর, আপনার WebGPU শেডারগুলিতে, আপনাকে অবশ্যই শীর্ষে স্পষ্টভাবে f16 সক্ষম করতে হবে। এর পরে, আপনি এটিকে অন্য যেকোন ফ্লোট ডেটা টাইপের মতো শেডারের মধ্যে ব্যবহার করতে পারবেন।

// my-shader.wgsl

enable f16;

struct Data {
  values : array<vec4<f16>>
}
@group(0) @binding(0) var<storage, read> data : Data;
@compute @workgroup_size(64) fn main(@builtin(global_invocation_id) gid : vec3u) {
  let value : vec4<f16> = data.values[gid.x];
  ...
}

প্যাকড পূর্ণসংখ্যা ডট পণ্য

অনেক মডেল এখনও মাত্র 8 বিট নির্ভুলতা (f16-এর অর্ধেক) দিয়ে ভাল কাজ করে। বিভাজন এবং বস্তুর স্বীকৃতির জন্য এটি এলএলএম এবং চিত্র মডেলগুলির মধ্যে জনপ্রিয়। এটি বলেছে, মডেলগুলির আউটপুট গুণমান কম নির্ভুলতার সাথে হ্রাস পায়, তাই 8-বিট কোয়ান্টাইজেশন প্রতিটি অ্যাপ্লিকেশনের জন্য উপযুক্ত নয়।

তুলনামূলকভাবে কিছু GPU নেটিভভাবে 8-বিট মান সমর্থন করে। এখানেই প্যাক করা পূর্ণসংখ্যা ডট পণ্য আসে। আমরা Chrome 123 এ DP4a পাঠিয়েছি।

আধুনিক জিপিইউ-তে দুটি 32-বিট পূর্ণসংখ্যা নেওয়ার জন্য বিশেষ নির্দেশাবলী রয়েছে, তাদের প্রতিটিকে 4টি পরপর-প্যাক করা 8-বিট পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করুন এবং তাদের উপাদানগুলির মধ্যে ডট পণ্য গণনা করুন।

এটি এআই এবং মেশিন লার্নিংয়ের জন্য বিশেষভাবে উপযোগী কারণ ম্যাট্রিক্স গুণন কার্নেলগুলি অনেকগুলি, অনেকগুলি ডট পণ্যের সমন্বয়ে গঠিত।

উদাহরণস্বরূপ, একটি 8 x 1 ভেক্টর দিয়ে একটি 4 x 8 ম্যাট্রিক্সকে গুণ করি। আউটপুট ভেক্টরের প্রতিটি মান গণনা করার জন্য এটি কম্পিউট করার জন্য 4টি ডট পণ্য নেওয়া জড়িত; A, B, C, এবং D.

ম্যাট্রিক্স-ভেক্টর গুণের উদাহরণের চিত্র

এই প্রতিটি আউটপুট গণনা করার প্রক্রিয়া একই; আমরা তাদের একটি কম্পিউটিং জড়িত পদক্ষেপ তাকান হবে. যেকোন গণনার আগে, আমাদের প্রথমে 8-বিট পূর্ণসংখ্যা ডেটাকে এমন একটি টাইপে রূপান্তর করতে হবে যার সাথে আমরা পাটিগণিত করতে পারি, যেমন f16। তারপর, আমরা একটি উপাদান-ভিত্তিক গুণ চালাই এবং অবশেষে, সমস্ত পণ্য একসাথে যোগ করি। মোট, সমগ্র ম্যাট্রিক্স-ভেক্টর গুণনের জন্য, আমরা ডেটা আনপ্যাক করার জন্য 40টি পূর্ণসংখ্যা ফ্লোট কনভার্সন করি, 32টি ফ্লোট গুণন এবং 28টি ফ্লোট সংযোজন করি।

আরও অপারেশন সহ বড় ম্যাট্রিক্সের জন্য, প্যাক করা পূর্ণসংখ্যা ডট পণ্যগুলি কাজের পরিমাণ কমাতে সাহায্য করতে পারে।

ফলাফল ভেক্টরের প্রতিটি আউটপুটের জন্য, আমরা WebGPU শেডিং ল্যাঙ্গুয়েজ বিল্ট-ইন dot4U8Packed ব্যবহার করে দুটি প্যাকড ডট প্রোডাক্ট অপারেশন করি এবং তারপর একসাথে ফলাফল যোগ করি। মোট, সমগ্র ম্যাট্রিক্স-ভেক্টর গুণনের জন্য, আমরা কোনো ডেটা রূপান্তর করি না। আমরা 8টি প্যাকড ডট পণ্য এবং 4টি পূর্ণসংখ্যা যোগ করি।

প্যাক করা পূর্ণসংখ্যা ম্যাট্রিক্স-ভেক্টর গুণের উদাহরণের চিত্র

আমরা বিভিন্ন ভোক্তা জিপিইউতে 8-বিট ডেটা সহ প্যাকড ইন্টিজার ডট পণ্যগুলি পরীক্ষা করেছি। 16-বিট ফ্লোটিং পয়েন্টের তুলনায়, আমরা দেখতে পাচ্ছি যে 8-বিট 1.6 থেকে 2.8 গুণ দ্রুত। যখন আমরা অতিরিক্তভাবে প্যাকড পূর্ণসংখ্যা ডট পণ্য ব্যবহার করি, তখন কর্মক্ষমতা আরও ভালো হয়। এটি 1.7 থেকে 2.9 গুণ দ্রুত।

ম্যাট্রিক্স-ভেক্টর মাল্টিপ্লাই স্পিডআপের স্ক্রিনশট: f16 বনাম u8
চার্ট 1: ম্যাট্রিক্স ভেক্টর স্পিডআপ, f16-এর সাথে U8 এবং U8-এর সাথে dot4U8Packed তুলনা করে।

wgslLanguageFeatures সম্পত্তির সাথে ব্রাউজার সমর্থনের জন্য পরীক্ষা করুন। যদি GPU প্যাকড ডট পণ্যগুলিকে স্থানীয়ভাবে সমর্থন না করে, তাহলে ব্রাউজারটি তার নিজস্ব বাস্তবায়ন পলিফিল করে।

// main.js

if (navigator.gpu.wgslLanguageFeatures.has('packed_4x8_integer_dot_product')) {
  // Use dot4U8Packed, dot4I8Packed builtin
  // functions in the shaders.
}

নিম্নলিখিত কোড স্নিপেট পার্থক্য (পার্থক্য) একটি WebGPU শেডারে প্যাক করা পূর্ণসংখ্যা পণ্য ব্যবহার করার জন্য প্রয়োজনীয় পরিবর্তনগুলি হাইলাইট করে৷

আগে — একটি WebGPU শেডার যা ভেরিয়েবল `sum`-এ আংশিক ডট পণ্য জমা করে। লুপের শেষে, একটি ভেক্টর এবং ইনপুট ম্যাট্রিক্সের একটি সারির মধ্যে 'সমষ্টি' সম্পূর্ণ ডট পণ্যটিকে ধরে রাখে।

// my-dot-product.wgsl

@compute @workgroup_size(64)
fn main(@builtin(global_invocation_id) gid : vec3u) {
  var sum : f16;
  let start = gid.x * uniforms.dim;
  for (var i = 0u; i < uniforms.dim; i++) {
    let v1 : vec4<f16> = vector.values[i];
    let v2 : vec4<f16> = matrix.values[start + i];
    sum += dot(v1, v2);
  }
}

পরে — প্যাক করা পূর্ণসংখ্যা ডট পণ্য ব্যবহার করার জন্য লেখা একটি WebGPU শেডার। প্রধান পার্থক্য হল ভেক্টর এবং ম্যাট্রিক্স থেকে 4টি ফ্লোট মান লোড করার পরিবর্তে, এই শেডারটি একটি একক 32-বিট পূর্ণসংখ্যা লোড করে। এই 32-বিট পূর্ণসংখ্যা চারটি 8-বিট পূর্ণসংখ্যা মানের ডেটা ধারণ করে। তারপর, আমরা দুটি মানের ডট পণ্য গণনা করতে dot4U8Packed কল করি।

// my-dot-product.wgsl

@compute @workgroup_size(64)
fn main(@builtin(global_invocation_id) gid : vec3u) {
  var sum : f32;
  let start = gid.x * uniforms.dim;
  for (var i = 0u; i < uniforms.dim; i++) {
    let v1 : u32 = vector.values[i];
    let v2 : u32 = matrix.values[start + i];
    sum += dot4U8Packed(v1, v2);
  }
}

16-বিট ফ্লোটিং পয়েন্ট এবং প্যাকড ইন্টিজার ডট পণ্য উভয়ই ক্রোমে পাঠানো বৈশিষ্ট্য যা AI এবং ML-কে ত্বরান্বিত করে। 16-বিট ফ্লোটিং পয়েন্ট উপলব্ধ থাকে যখন হার্ডওয়্যার এটিকে সমর্থন করে এবং Chrome সমস্ত ডিভাইসে প্যাকড ইন্টিজার ডট পণ্যগুলি প্রয়োগ করে৷

আপনি আরও ভাল পারফরম্যান্স অর্জন করতে আজই Chrome Stable-এ এই বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন৷

প্রস্তাবিত বৈশিষ্ট্য

সামনের দিকে তাকিয়ে, আমরা আরও দুটি বৈশিষ্ট্য অনুসন্ধান করছি: উপগোষ্ঠী এবং সমবায় ম্যাট্রিক্স গুন।

সাবগ্রুপ বৈশিষ্ট্যটি SIMD-স্তরের সমান্তরালতাকে যোগাযোগ করতে বা সমষ্টিগত গণিত ক্রিয়াকলাপ সম্পাদন করতে সক্ষম করে, যেমন 16টির বেশি সংখ্যার জন্য একটি যোগফল। এটি দক্ষ ক্রস-থ্রেড ডেটা ভাগ করে নেওয়ার অনুমতি দেয়। সাবগ্রুপগুলি আধুনিক GPUs API-এ সমর্থিত, বিভিন্ন নাম সহ এবং সামান্য ভিন্ন আকারে।

আমরা সাধারণ সেটটিকে একটি প্রস্তাবে পাতিয়েছি যা আমরা WebGPU মানককরণ গ্রুপে নিয়েছি। এবং, আমরা একটি পরীক্ষামূলক পতাকার পিছনে Chrome-এ উপগোষ্ঠীগুলিকে প্রোটোটাইপ করেছি এবং আমাদের প্রাথমিক ফলাফলগুলিকে আলোচনায় নিয়ে এসেছি৷ মূল বিষয় হল কিভাবে পোর্টেবল আচরণ নিশ্চিত করা যায়।

কোঅপারেটিভ ম্যাট্রিক্স মাল্টিপ্লাই হল GPU-তে সাম্প্রতিক সংযোজন। একটি বড় ম্যাট্রিক্স গুণকে একাধিক ছোট ম্যাট্রিক্স গুণে ভাগ করা যেতে পারে। সমবায় ম্যাট্রিক্স গুন একক যৌক্তিক ধাপে এই ছোট স্থির-আকারের ব্লকগুলিতে গুণন সম্পাদন করে। সেই ধাপের মধ্যে, থ্রেডের একটি গ্রুপ ফলাফল গণনা করতে দক্ষতার সাথে সহযোগিতা করে।

আমরা অন্তর্নিহিত GPU API-এ সমর্থন জরিপ করেছি , এবং WebGPU মানককরণ গ্রুপের কাছে একটি প্রস্তাব উপস্থাপন করার পরিকল্পনা করেছি। সাবগ্রুপগুলির মতো, আমরা আশা করি যে বেশিরভাগ আলোচনা পোর্টেবিলিটির চারপাশে কেন্দ্রীভূত হবে।

সাবগ্রুপ ক্রিয়াকলাপগুলির কার্যকারিতা মূল্যায়ন করার জন্য, একটি বাস্তব অ্যাপ্লিকেশনে, আমরা MediaPipe-এ সাবগ্রুপগুলির জন্য পরীক্ষামূলক সমর্থনকে একীভূত করেছি এবং সাবগ্রুপ অপারেশনগুলির জন্য Chrome এর প্রোটোটাইপের সাথে এটি পরীক্ষা করেছি৷

আমরা বড় ভাষা মডেলের প্রিফিল ফেজের GPU কার্নেলে সাবগ্রুপ ব্যবহার করেছি, তাই আমি শুধুমাত্র প্রিফিল ফেজের জন্য স্পিডআপ রিপোর্ট করছি। একটি ইন্টেল জিপিইউতে, আমরা দেখতে পাই যে সাবগ্রুপগুলি বেসলাইনের চেয়ে আড়াই গুণ দ্রুত কাজ করে। যাইহোক, এই উন্নতিগুলি বিভিন্ন GPU তে সামঞ্জস্যপূর্ণ নয়।

মিডিয়াপাইপ এলএলএম ইনফারেন্সে সাবগ্রুপ স্পিডআপের স্ক্রিনশট
চার্ট 2. সাবগ্রুপগুলি ক্রোম এবং মিডিয়াপাইপে পরীক্ষামূলক সমর্থন সহ ইন্টেল টাইগার লেক GT2 GPU-তে প্রিফিল 2.5x দ্রুত রান করে।

পরবর্তী চার্ট একাধিক ভোক্তা GPU জুড়ে একটি ম্যাট্রিক্স গুণিত মাইক্রোবেঞ্চমার্ক অপ্টিমাইজ করতে সাবগ্রুপ প্রয়োগের ফলাফল দেখায়। বৃহৎ ভাষার মডেলে ম্যাট্রিক্স গুণন একটি ভারী ক্রিয়াকলাপ। ডেটা দেখায় যে অনেক GPU-তে, সাবগ্রুপগুলি বেসলাইনের চেয়ে দুই, পাঁচ এবং এমনকি তেরো গুণ গতি বাড়ায়। যাইহোক, লক্ষ্য করুন যে প্রথম GPU-তে, সাবগ্রুপগুলি মোটেও ভাল নয়।

ম্যাট্রিক্স গুণের জন্য সাবগ্রুপ স্পিডআপের স্ক্রিনশট
চার্ট 3. ম্যাট্রিক্স গুণনের জন্য উপগোষ্ঠী প্রয়োগ করা কর্মক্ষমতা আরও বাড়াতে পারে।

GPU অপ্টিমাইজেশান কঠিন

শেষ পর্যন্ত, আপনার GPU অপ্টিমাইজ করার সর্বোত্তম উপায় ক্লায়েন্ট কি GPU অফার করে তার উপর নির্ভর করে। অভিনব নতুন GPU বৈশিষ্ট্যগুলি ব্যবহার করা সবসময় আপনি যেভাবে আশা করতে পারেন সেভাবে অর্থ প্রদান করে না, কারণ এতে অনেক জটিল কারণ জড়িত থাকতে পারে। একটি জিপিইউতে সেরা অপ্টিমাইজেশন কৌশল অন্য জিপিইউতে সেরা কৌশল নাও হতে পারে।

আপনি GPU-এর কম্পিউটিং থ্রেডগুলি সম্পূর্ণরূপে ব্যবহার করার সময় মেমরি ব্যান্ডউইথ কমাতে চান।

মেমরি অ্যাক্সেস প্যাটার্ন সত্যিই গুরুত্বপূর্ণ হতে পারে, খুব. কম্পিউট থ্রেডগুলি হার্ডওয়্যারের জন্য সর্বোত্তম প্যাটার্নে মেমরি অ্যাক্সেস করার সময় জিপিইউগুলি আরও ভাল পারফর্ম করে। গুরুত্বপূর্ণ: আপনি বিভিন্ন GPU হার্ডওয়্যারে বিভিন্ন কর্মক্ষমতা বৈশিষ্ট্য আশা করা উচিত। আপনাকে GPU এর উপর নির্ভর করে বিভিন্ন অপ্টিমাইজেশন চালানোর প্রয়োজন হতে পারে।

নিম্নলিখিত চার্টে, আমরা একই ম্যাট্রিক্স মাল্টিপ্লাই অ্যালগরিদম নিয়েছি, কিন্তু বিভিন্ন অপ্টিমাইজেশান কৌশলের প্রভাব এবং বিভিন্ন GPU তে জটিলতা এবং ভিন্নতা আরও প্রদর্শন করতে আরেকটি মাত্রা যোগ করেছি। আমরা এখানে একটি নতুন কৌশল প্রবর্তন করেছি, যাকে আমরা "Swizzle" বলব। সুইজল হার্ডওয়্যারের জন্য আরও অনুকূল হতে মেমরি অ্যাক্সেস প্যাটার্নগুলিকে অপ্টিমাইজ করে।

আপনি দেখতে পারেন যে মেমরি সুইজল একটি উল্লেখযোগ্য প্রভাব আছে; এটি কখনও কখনও উপগোষ্ঠীর চেয়েও বেশি প্রভাবশালী। GPU 6-এ, swizzle একটি 12x স্পিডআপ প্রদান করে, যখন সাবগ্রুপগুলি একটি 13x স্পিডআপ প্রদান করে। একত্রিত, তাদের একটি অবিশ্বাস্য 26x গতি আছে। অন্যান্য জিপিইউগুলির জন্য, কখনও কখনও সুইজল এবং সাবগ্রুপগুলি একত্রিত একটির চেয়ে ভাল পারফর্ম করে। এবং অন্যান্য জিপিইউতে, একচেটিয়াভাবে সুইজল ব্যবহার করা সর্বোত্তম কার্য সম্পাদন করে।

ম্যাট্রিক্স মাল্টিপ্লাই কৌশলের জন্য স্পিডআপের স্ক্রিনশট
চার্ট 4।

হার্ডওয়্যারের প্রতিটি অংশে ভালভাবে কাজ করার জন্য GPU অ্যালগরিদম টিউনিং এবং অপ্টিমাইজ করার জন্য অনেক দক্ষতার প্রয়োজন হতে পারে। কিন্তু সৌভাগ্যক্রমে মিডিয়াপিপ , Transformers.js , Apache TVM , ONNX রানটাইম ওয়েব এবং আরও অনেক কিছুর মতো উচ্চ স্তরের লাইব্রেরি ফ্রেমওয়ার্কগুলিতে প্রচুর প্রতিভাবান কাজ চলছে৷

লাইব্রেরি এবং ফ্রেমওয়ার্কগুলি বিভিন্ন জিপিইউ আর্কিটেকচার পরিচালনার জটিলতা এবং প্ল্যাটফর্ম-নির্দিষ্ট কোড তৈরি করার জন্য ভাল অবস্থানে রয়েছে যা ক্লায়েন্টে ভালভাবে চলবে।

Takeaways

ক্রোম টিম মেশিন লার্নিং ওয়ার্কলোডের জন্য ওয়েব প্ল্যাটফর্ম উন্নত করতে WebAssembly এবং WebGPU স্ট্যান্ডার্ড তৈরি করতে সাহায্য করে চলেছে। আমরা দ্রুত কম্পিউট প্রাইমিটিভে বিনিয়োগ করছি, ওয়েব স্ট্যান্ডার্ড জুড়ে আরও ভাল ইন্টারপ, এবং নিশ্চিত করছি যে বড় এবং ছোট উভয় মডেলই ডিভাইস জুড়ে দক্ষতার সাথে চলতে সক্ষম।

আমাদের লক্ষ্য হল প্ল্যাটফর্মের ক্ষমতাকে সর্বাধিক করা এবং ওয়েবের সেরাটি ধরে রাখা: এটির নাগাল, ব্যবহারযোগ্যতা এবং বহনযোগ্যতা। এবং আমরা একা এই কাজ করছি না. আমরা W3C-এ অন্যান্য ব্রাউজার বিক্রেতা এবং অনেক ডেভেলপমেন্ট পার্টনারদের সাথে সহযোগিতায় কাজ করছি।

আমরা আশা করি আপনি WebAssembly এবং WebGPU এর সাথে কাজ করার সময় নিম্নলিখিতটি মনে রাখবেন:

  • AI অনুমান এখন ওয়েবে, ডিভাইস জুড়ে উপলব্ধ। এটি ক্লায়েন্ট ডিভাইসে চালানোর সুবিধা নিয়ে আসে, যেমন সার্ভারের কম খরচ, কম লেটেন্সি এবং বর্ধিত গোপনীয়তা।
  • যদিও আলোচিত অনেক বৈশিষ্ট্য প্রাথমিকভাবে ফ্রেমওয়ার্ক লেখকদের জন্য প্রাসঙ্গিক, আপনার অ্যাপ্লিকেশনগুলি খুব বেশি ওভারহেড ছাড়াই উপকৃত হতে পারে।
  • ওয়েব মান তরল, এবং বিকশিত, এবং আমরা সবসময় প্রতিক্রিয়া খুঁজছি. WebAssembly এবং WebGPU-এর জন্য আপনার শেয়ার করুন।

স্বীকৃতি

আমরা Intel ওয়েব গ্রাফিক্স টিমকে ধন্যবাদ জানাতে চাই, যারা WebGPU f16 এবং প্যাকড ইন্টিজার ডট প্রোডাক্ট ফিচার চালানোর ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করেছিল। আমরা অন্যান্য ব্রাউজার বিক্রেতাদের সহ W3C-তে WebAssembly এবং WebGPU ওয়ার্কিং গ্রুপের অন্যান্য সদস্যদের ধন্যবাদ জানাতে চাই।

অবিশ্বাস্য অংশীদার হওয়ার জন্য Google এবং ওপেন সোর্স সম্প্রদায় উভয়েই AI এবং ML টিমকে ধন্যবাদ৷ এবং অবশ্যই, আমাদের সব সতীর্থ যারা এই সব সম্ভব করে তোলে।