ভিডিও প্রিট্রেইনিং (VPT) PlatoBlockchain ডেটা ইন্টেলিজেন্সের সাথে Minecraft খেলতে শেখা। উল্লম্ব অনুসন্ধান. আ.

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা

আমরা একটি নিউরাল নেটওয়ার্ককে ভিডিও প্রি-ট্রেইনিং (VPT) দ্বারা মাইনক্রাফ্ট চালানোর জন্য প্রশিক্ষণ দিয়েছি, মানব মাইনক্রাফ্ট খেলার একটি বিশাল আনলেবেলবিহীন ভিডিও ডেটাসেটে, শুধুমাত্র অল্প পরিমাণে লেবেলযুক্ত ঠিকাদার ডেটা ব্যবহার করে। ফাইন-টিউনিংয়ের মাধ্যমে, আমাদের মডেল হীরার সরঞ্জাম তৈরি করতে শিখতে পারে, এমন একটি কাজ যা সাধারণত দক্ষ মানুষের 20 মিনিটের বেশি সময় নেয় (24,000 অ্যাকশন)। আমাদের মডেল কীপ্রেস এবং মাউস নড়াচড়ার নেটিভ হিউম্যান ইন্টারফেস ব্যবহার করে, এটিকে বেশ সাধারণ করে তোলে এবং সাধারণ কম্পিউটার-ব্যবহারকারী এজেন্টদের দিকে একটি পদক্ষেপের প্রতিনিধিত্ব করে।

কাগজ পড়ুন


কোড এবং মডেল ওজন দেখুন


মাইনআরএল প্রতিযোগিতা

ইন্টারনেটে প্রচুর পরিমাণে সর্বজনীনভাবে উপলব্ধ ভিডিও রয়েছে যা থেকে আমরা শিখতে পারি। আপনি একজন ব্যক্তিকে একটি চমত্কার উপস্থাপনা করতে, একজন ডিজিটাল শিল্পী একটি সুন্দর সূর্যাস্ত আঁকতে এবং একজন Minecraft প্লেয়ারকে একটি জটিল ঘর তৈরি করতে দেখতে পারেন৷ যাইহোক, এই ভিডিও শুধুমাত্র একটি রেকর্ড প্রদান কি ঘটেছে কিন্তু সুনির্দিষ্টভাবে নয় কিভাবে এটি অর্জন করা হয়েছিল, অর্থাৎ আপনি মাউসের নড়াচড়া এবং কী চাপার সঠিক ক্রম জানতে পারবেন না। আমরা যদি বড় মাপের নির্মাণ করতে চাই ভিত্তি মডেল এই ডোমেনে যেমন আমরা ভাষার সাথে করেছি GPT, অ্যাকশন লেবেলের এই অভাব একটি নতুন চ্যালেঞ্জ তৈরি করে যা ভাষা ডোমেনে উপস্থিত নয়, যেখানে "অ্যাকশন লেবেল" একটি বাক্যে কেবল পরবর্তী শব্দ।

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

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
ভিপিটি পদ্ধতি ওভারভিউ

ভিপিটি জিরো-শট ফলাফল

আমরা মাইনক্রাফ্টে আমাদের পদ্ধতিকে যাচাই করতে বেছে নিয়েছি কারণ এটি (1) বিশ্বের সবচেয়ে সক্রিয়ভাবে খেলা ভিডিও গেমগুলির মধ্যে একটি এবং এইভাবে অবাধে উপলব্ধ ভিডিও ডেটার একটি সম্পদ রয়েছে এবং (2) বিভিন্ন ধরণের জিনিসের সাথে খোলামেলা। করতে, কম্পিউটার ব্যবহারের মতো বাস্তব-বিশ্বের অ্যাপ্লিকেশনের মতো। অপছন্দ পূর্বে কাজ মাইনক্রাফ্টে যা অনুসন্ধান সহজ করার লক্ষ্যে সরলীকৃত অ্যাকশন স্পেস ব্যবহার করে, আমাদের AI অনেক বেশি সাধারণভাবে প্রযোজ্য, যদিও অনেক বেশি কঠিন, নেটিভ হিউম্যান ইন্টারফেস ব্যবহার করে: মাউস এবং কীবোর্ডের সাথে 20Hz ফ্রেমরেট।

IDM-লেবেলযুক্ত অনলাইন ভিডিওর 70,000 ঘন্টার উপর প্রশিক্ষিত, আমাদের আচরণগত ক্লোনিং মডেল ("VPT ফাউন্ডেশন মডেল") Minecraft-এ এমন কাজগুলি সম্পন্ন করে যা স্ক্র্যাচ থেকে শক্তিবৃদ্ধি শেখার মাধ্যমে অর্জন করা প্রায় অসম্ভব। এটি লগ সংগ্রহের জন্য গাছ কাটা শিখে, সেই লগগুলিকে তক্তাগুলিতে তৈরি করতে এবং তারপর সেই তক্তাগুলিকে একটি কারুকাজ করার টেবিলে তৈরি করতে শেখে; এই ক্রমটি মাইনক্রাফ্টে একজন মানুষের দক্ষ প্রায় 50 সেকেন্ড বা 1,000 টানা গেম অ্যাকশন নেয়।

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
একটি ক্রাফটিং টেবিল তৈরি করার জন্য প্রয়োজনীয় আইটেমগুলির ক্রম, প্রতিটি ধাপে পৌঁছতে দক্ষ মানুষের যে সময় লাগে তার মধ্যবর্তী সময়ের সাথে লেবেল করা
একটি ক্রাফটিং টেবিল "জিরো শট" তৈরি করা (অর্থাৎ অতিরিক্ত ফাইন-টিউনিং ছাড়াই শুধুমাত্র প্রাক-প্রশিক্ষণের পরে)

অতিরিক্তভাবে, মডেলটি অন্যান্য জটিল দক্ষতাগুলি সম্পাদন করে যা মানুষ প্রায়শই গেমে করে, যেমন সাঁতার কাটা, খাবারের জন্য প্রাণী শিকার করা এবং সেই খাবার খাওয়া। এটি "পিলার জাম্পিং" এর দক্ষতাও শিখেছে, মাইনক্রাফ্টের একটি সাধারণ আচরণ যা বারবার লাফ দিয়ে এবং নিজের নীচে একটি ব্লক স্থাপন করে নিজেকে উঁচু করে তোলা।

সাঁতার (শূন্য-শট)

শিকারী প্রাণী (শূন্য-শট)

খাবার খাওয়া (শূন্য-শট)

পিলার জাম্পিং (শূন্য-শট)

আচরণগত ক্লোনিংয়ের সাথে ফাইন-টিউনিং

ফাউন্ডেশন মডেলগুলি একটি বিস্তৃত আচরণের প্রোফাইলের জন্য ডিজাইন করা হয়েছে এবং সাধারণত বিভিন্ন ধরণের কাজ জুড়ে সক্ষম। নতুন জ্ঞান অন্তর্ভুক্ত করার জন্য বা তাদের একটি সংকীর্ণ টাস্ক ডিস্ট্রিবিউশনে বিশেষজ্ঞ করার অনুমতি দেওয়ার জন্য, এই মডেলগুলিকে আরও ছোট, আরও নির্দিষ্ট ডেটাসেটে সূক্ষ্ম-টিউন করা সাধারণ অভ্যাস। ভিপিটি ফাউন্ডেশন মডেলটি ডাউনস্ট্রিম ডেটাসেটের সাথে কতটা ভালোভাবে সুরক্ষিত করা যায় তার একটি কেস স্টাডি হিসাবে, আমরা আমাদের ঠিকাদারদের একেবারে নতুন মাইনক্রাফ্ট ওয়ার্ল্ডে 10 মিনিটের জন্য খেলতে এবং মৌলিক মাইনক্রাফ্ট উপকরণ থেকে একটি ঘর তৈরি করতে বলেছি। আমরা আশা করেছিলাম যে এটি ভিত্তি মডেলের নির্ভরযোগ্যভাবে "প্রাথমিক খেলা" দক্ষতা যেমন বিল্ডিং ক্রাফটিং টেবিল তৈরি করার ক্ষমতাকে বাড়িয়ে তুলবে। এই ডেটাসেটে ফাইন-টিউনিং করার সময়, আমরা ফাউন্ডেশন মডেলে ইতিমধ্যে উপস্থিত প্রাথমিক খেলার দক্ষতাগুলিকে নির্ভরযোগ্যভাবে সম্পাদন করার ক্ষেত্রেই শুধুমাত্র ব্যাপক উন্নতি দেখতে পাই না, তবে সূক্ষ্ম-টিউন করা মডেলটি কাঠের উভয় কারুকাজ করে প্রযুক্তি গাছের আরও গভীরে যেতে শেখে। এবং পাথরের সরঞ্জাম। কখনও কখনও আমরা এমনকি কিছু প্রাথমিক আশ্রয়কেন্দ্র নির্মাণ এবং এজেন্টদের বুকে অভিযান সহ গ্রামগুলিতে অনুসন্ধান করতে দেখি।

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
একটি স্টোন পিক্যাক্স তৈরি করতে প্রয়োজনীয় আইটেমগুলির ক্রম, প্রতিটি ধাপে পৌঁছতে দক্ষ মানুষের যে মাঝামাঝি সময় লাগে তার সাথে লেবেল করা
বিসি ফাইন-টিউনিং থেকে প্রাথমিক খেলার আচরণ উন্নত হয়েছে

একটি পাথর পিক্যাক্স তৈরি করা

একটি প্রাথমিক কাঠের আশ্রয় নির্মাণ

একটি গ্রামে খোঁজা হচ্ছে

ডেটা স্কেলিং

সম্ভবত আমাদের কাজের সবচেয়ে গুরুত্বপূর্ণ অনুমান হল যে একই ছোট ঠিকাদার ডেটাসেট থেকে সরাসরি বিসি ফাউন্ডেশন মডেলকে প্রশিক্ষণ দেওয়ার চেয়ে IDM (ভিপিটি পাইপলাইনের অংশ হিসাবে) প্রশিক্ষণের জন্য লেবেলযুক্ত ঠিকাদার ডেটা ব্যবহার করা অনেক বেশি কার্যকর। এই অনুমানকে যাচাই করার জন্য আমরা 1 থেকে 70,000 ঘন্টা পর্যন্ত ডেটার পরিমাণ বৃদ্ধির উপর ভিত্তি মডেলগুলিকে প্রশিক্ষণ দিই। 2,000 ঘন্টার কম ডেটাতে প্রশিক্ষণপ্রাপ্তদেরকে গ্রাউন্ড-ট্রুথ লেবেল সহ কন্ট্রাক্টর ডেটাতে প্রশিক্ষণ দেওয়া হয় যা মূলত IDM প্রশিক্ষণের জন্য সংগ্রহ করা হয়েছিল, এবং 2,000 ঘন্টার বেশি সময় প্রশিক্ষণপ্রাপ্তদের আমাদের IDM লেবেলযুক্ত ইন্টারনেট ডেটাতে প্রশিক্ষণ দেওয়া হয়। তারপরে আমরা প্রতিটি ফাউন্ডেশন মডেল গ্রহণ করি এবং পূর্ববর্তী বিভাগে বর্ণিত হাউস বিল্ডিং ডেটাসেটে সূক্ষ্ম সুর করি।

ফাইন-টিউনিংয়ের উপর ভিত্তি মডেল প্রশিক্ষণ ডেটার প্রভাব

ফাউন্ডেশন মডেলের ডেটা বাড়ার সাথে সাথে, আমরা সাধারণত ক্রাফটিং ক্ষমতা বৃদ্ধি দেখতে পাই এবং শুধুমাত্র সবচেয়ে বড় ডেটা স্কেলে আমরা পাথরের হাতিয়ার ক্রাফটিং এর আবির্ভাব দেখতে পাই।

রিইনফোর্সমেন্ট শেখার সাথে ফাইন-টিউনিং

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

একটি ডায়মন্ড পিক্যাক্স তৈরি করার জন্য সাবটাস্কগুলির একটি দীর্ঘ এবং জটিল ক্রম প্রয়োজন। এই টাস্কটিকে ট্র্যাক্টেবল করতে, আমরা ক্রমানুসারে প্রতিটি আইটেমের জন্য এজেন্টদের পুরস্কৃত করি।

ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
ভিডিও প্রি-ট্রেনিং (ভিপিটি) দিয়ে মাইনক্রাফ্ট খেলতে শেখা
RL ফাইন-টিউনড VPT মডেল একটি হীরার পিকএক্স তৈরি করছে

আমরা দেখেছি যে র্যান্ডম ইনিশিয়ালাইজেশন (স্ট্যান্ডার্ড RL পদ্ধতি) থেকে প্রশিক্ষিত একটি RL নীতি খুব কমই কোনো পুরস্কার অর্জন করে, কখনও লগ সংগ্রহ করতে শেখে না এবং খুব কমই লাঠি সংগ্রহ করে। সম্পূর্ণ বিপরীতে, একটি ভিপিটি মডেল থেকে ফাইন-টিউনিং শুধুমাত্র হীরা পিক্যাক্স তৈরি করতে শেখে না (যা এটি 2.5-মিনিটের মাইনক্রাফ্ট পর্বের 10% তে করে), তবে এটি পর্যন্ত সমস্ত আইটেম সংগ্রহে মানব-স্তরের সাফল্যের হারও রয়েছে হীরা পিকক্স এই প্রথম যে কেউ মাইনক্রাফ্টে হীরার সরঞ্জাম তৈরি করতে সক্ষম এমন একটি কম্পিউটার এজেন্ট দেখিয়েছে, যা মানুষের গড়ে 20 মিনিটের বেশি (24,000 অ্যাকশন) নেয়।

পর্বের উপর পুরস্কার

উপসংহার

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

আরও তথ্যের জন্য, দয়া করে দেখুন আমাদের কাগজ. আমরা আমাদের ঠিকাদার ডেটা, মাইনক্রাফ্ট পরিবেশ, মডেল কোড এবং মডেলের ওজনগুলিও উন্মুক্ত সোর্সিং করছি, যা আমরা আশা করি VPT-তে ভবিষ্যতের গবেষণায় সহায়তা করবে। উপরন্তু, আমরা এই বছর MineRL NeurIPS প্রতিযোগিতার সাথে অংশীদারিত্ব করেছি। প্রতিযোগীরা মাইনক্রাফ্টে অনেক কঠিন কাজ সমাধান করার চেষ্টা করতে আমাদের মডেলগুলি ব্যবহার এবং সূক্ষ্ম-টিউন করতে পারে। যারা আগ্রহী তারা দেখতে পারেন প্রতিযোগিতার ওয়েবপেজ এবং একটি নীল-আকাশ পুরস্কারের জন্য প্রতিযোগিতা করুন $100,000 একটি নিয়মিত পুরস্কার পুল ছাড়াও $20,000. অনুদান স্ব-পরিচয়হীন নিম্ন প্রতিনিধিত্বকারী গোষ্ঠী এবং ব্যক্তিদের জন্য উপলব্ধ।


স্বীকার
এটি একটি নিবেদিত দলের দ্বারা একটি বড় প্রচেষ্টা ছিল. প্রতিটি লেখক দীর্ঘ সময় ধরে অনেক ফ্রন্টে বিশাল অবদান রেখেছেন। সমস্ত সদস্য ছয় মাসেরও বেশি সময় ধরে প্রকল্পে পুরো সময় ছিল। BB, IA, PZ, এবং JC মূল ভিপিটি প্রকল্প দলে ছিল, এবং এইভাবে আরও দীর্ঘ (এক বছরের বেশি) জন্য জড়িত ছিল। সেই মূল দলের সদস্যদের বাদ দিয়ে, লেখকের আদেশ এলোমেলো। এটি IA এবং PZ-এর মধ্যেও এলোমেলো করা হয়েছিল।

import {Runtime, Inspector, Library} from “https://unpkg.com/@observablehq/runtime@4.12.0/dist/runtime.js”; import notebookEarlyGameBehavior from “https://api.observablehq.com/d/7f62ee5a1b0ddebd.js?v=3”; import notebookRewardOverEpisodes from “https://api.observablehq.com/d/4d319198b6ab74d5.js?v=3”; import notebookBCFineTuning from “https://api.observablehq.com/d/119b327a0da6dc38.js?v=3” const customWidth = function (selector) { return (new Library).Generators.observe(function(change) { var width = change(document.querySelector(selector).clientWidth); function resized() { var w = document.querySelector(selector).clientWidth; if (w !== width) change(width = w); } window.addEventListener(“resize”, resized); return function() { window.removeEventListener(“resize”, resized); }; }); }; const earlyGameBehaviorSelector = “#chart-early-game-behavior”; const earlyGameBehaviorRenders = { “chart”: earlyGameBehaviorSelector, }; new Runtime(Object.assign(new Library, {width: customWidth(earlyGameBehaviorSelector)})).module(notebookEarlyGameBehavior, name => { const selector = earlyGameBehaviorRenders[name]; if (selector) { // key exists return new Inspector(document.querySelector(selector)); } else { return true; } }); const rewardOverEpisodesSelector = “#chart-reward-over-episodes”; const rewardOverEpisodesRenders = { “chart”: rewardOverEpisodesSelector, }; new Runtime(Object.assign(new Library, {width: customWidth(rewardOverEpisodesSelector)})).module(notebookRewardOverEpisodes, name => { const selector = rewardOverEpisodesRenders[name]; if (selector) { // key exists return new Inspector(document.querySelector(selector)); } else { return true; } }); const rewardBCFineTuningSelector = “#chart-bc-fine-tuning”; const rewardBCFineTuningRenders = { “chart”: rewardBCFineTuningSelector, }; new Runtime(Object.assign(new Library, {width: customWidth(rewardBCFineTuningSelector)})).module(notebookBCFineTuning, name => { const selector = rewardBCFineTuningRenders[name]; if (selector) { // key exists return new Inspector(document.querySelector(selector)); } else { return true; } }); var playerObjects = {}; var initVimeo = function () { var videoEls = document.querySelectorAll(‘iframe[data-vimeo]’); videoEls.forEach(function (v) { var id = v.getAttribute(‘data-id’); var player = new Vimeo.Player(v); playerObjects[id] = player; // keep track of players by id }); var triggers = document.querySelectorAll(‘.js-video-trigger’); triggers.forEach(function (t) { t.addEventListener(‘click’, function (e) { var id = this.getAttribute(‘data-video’); if (!id) return; e.preventDefault(); playerObjects[id].play(); }); }); }; function initCanvas() { let needsRecalc = true; const DESIRED_SIZE = window.innerWidth { function step() { if (needsRecalc) { needsRecalc = false; numColumns = Math.floor(window.innerWidth / DESIRED_SIZE); tileWidth = window.innerWidth / numColumns; tileHeight = ((SOURCE_HEIGHT / SOURCE_WIDTH) * tileWidth); canvas.setAttribute(‘width’, window.innerWidth); canvas.setAttribute(‘height’, tileHeight); canvas.parentNode.style.aspectRatio = `${window.innerWidth} / ${tileHeight}`; } let column = 0; for (let i = 0; i < numColumns; i++) { ctx.drawImage(video, tileWidth * i, 0, tileWidth, tileHeight); column++; } requestAnimationFrame(step) } requestAnimationFrame(step); }) } document.addEventListener('DOMContentLoaded', function() { initVimeo(); initCanvas(); });

সময় স্ট্যাম্প:

থেকে আরো OpenAI