কয়েক সপ্তাহ আগে আমি Google-এর জেমা ডেভেলপার ডে-তে যোগ দিয়েছিলাম। Gemma নামক তাদের নতুন LLM মডেলগুলির সক্ষমতা, বহনযোগ্যতা এবং উন্মুক্ততা উপস্থাপন করার জন্য Google-কে উৎসর্গ করা একটি দিন।
এই মডেলগুলি জেনারেটিভ এআই-এর জন্য একটি উত্তেজনাপূর্ণ নতুন পর্ব উপস্থাপন করে। স্থানীয় ডিভাইসে মোতায়েন করার জন্য যথেষ্ট ছোট মডেল এবং এখনও একটি আকর্ষক এবং সহায়ক অভিজ্ঞতা প্রদান করতে পারে।
আমি মোবাইল এআই দেখেছি এবং অনুপ্রাণিত বোধ করার দিন থেকে দূরে চলে যাওয়ার পর কিছুক্ষণ হয়ে গেছে । আমি একটি অ্যান্ড্রয়েড অ্যাপে এই মডেলগুলি চেষ্টা করলে কী হয় তা দেখার সিদ্ধান্ত নিয়েছি।
আমি জেমাকে একটি সহজ কিন্তু অভিনব চ্যালেঞ্জ দিতে চেয়েছিলাম। সাইমন বলে একটা খেলা খেলছে।
নিয়মগুলো সহজ। একজন খেলোয়াড় সাইমন হতে পারে। তাদের ভূমিকা হল অন্যান্য খেলোয়াড়দের পারফর্ম করার জন্য কাজ দেওয়া। সাইমন হিসাবে খেলতে থাকা খেলোয়াড়কে টাস্ক দেওয়ার আগে "সাইমন বলেছেন" বলতে হবে।
আমি তিনটি স্ক্রিন সহ একটি অ্যাপ তৈরি করেছি। একটি এন্ট্রি স্ক্রিন, একটি নির্দেশ স্ক্রীন এবং একটি চ্যাট স্ক্রীন যেখানে জেমা যোগাযোগ করতে পারে এবং কাজ দিতে পারে।
চ্যাট স্ক্রিন তৈরির গতি বাড়ানোর জন্য আমি মেয়তা তালিতির এই ব্লগ পোস্টটি অত্যন্ত সহায়ক বলে মনে করেছি।
স্ক্রিন তৈরি করে আমার পরবর্তী কাজটি ছিল জেমাকে একীভূত করা। এর জন্য আমি মিডিয়াপাইপ নামক একটি টুলের উপর নির্ভর করেছি।
MediaPipe হল Android, iOS এবং ওয়েবের অ্যাপে AI মডেলগুলিকে একীভূত করা সহজ করার লক্ষ্যে টুলগুলির একটি সংগ্রহ৷ MediaPipe এর সাথে আপনার প্রয়োজনের উপর নির্ভর করে আপনার পছন্দের অনেকগুলি রয়েছে।
আপনি যদি দ্রুত শুরু করতে চান, MediaPipe আপনাকে AI মডেলগুলিতে কল করার জন্য Tasks নামে একটি API প্রদান করে। এই API গুলি বিভিন্ন ক্ষেত্রে বিভক্ত যেমন ভিশন, টেক্সট এবং অডিও।
MediaPipe আপনার অ্যাপের মধ্যে এম্বেড করার জন্য পূর্বপ্রশিক্ষিত মডেলের একটি সংগ্রহও প্রদান করে। আবার, দ্রুত শুরু করার জন্য দরকারী।
আপনার যদি আরও কাস্টম কিছুর প্রয়োজন হয় এবং স্ক্র্যাচ থেকে একটি মডেল তৈরি করতে না চান তাহলে MediaPipe মডেল মেকার নামে একটি টুল সরবরাহ করে। মডেল মেকার একটি বিদ্যমান মেশিন লার্নিং মডেলকে পুনরায় প্রশিক্ষণ দিতে এবং নতুন ডেটা সরবরাহ করতে ট্রান্সফার লার্নিং নামক একটি প্রক্রিয়া ব্যবহার করে। এই পদ্ধতির সুবিধা হল এটি সময় বাঁচায় এবং একটি নতুন মডেল তৈরি করতে কম প্রশিক্ষণ ডেটার প্রয়োজন হয়।
মডেল মেকার এই প্রক্রিয়ার মাধ্যমে তৈরি মডেলের আকারও কমাতে পারে। মনে রাখবেন যে এই প্রক্রিয়াটি মডেলটিকে তার বিদ্যমান জ্ঞানের কিছু "ভুলে যেতে" কারণ করে।
MediaPipe-এর চূড়ান্ত টুল হল MediaPipe Studio , আপনার কাস্টম মডেলগুলিকে মূল্যায়ন ও পরিবর্তন করার জন্য একটি ওয়েব অ্যাপ্লিকেশন। আপনি যদি আপনার মডেলগুলিকে বেঞ্চমার্ক করতে চান এবং মোতায়েন করার আগে তারা কতটা ভাল কাজ করে তা বুঝতে চাইলে দরকারী৷
আমাদের প্রয়োজনের জন্য আমরা LLM ইন্টারফেন্স এপিআই, মিডিয়াপাইপের জন্য একটি নতুন এপিআই ব্যবহার করতে যাচ্ছি। এটি আমাদের জেমার সাথে যোগাযোগ করতে এবং একটি প্রতিক্রিয়া পেতে দেয়।
MediaPipe ব্যবহার করার জন্য আপনাকে প্রথমে এটিকে অ্যাপে গ্রেডেল নির্ভরতা হিসেবে যোগ করতে হবে:
implementation ("com.google.mediapipe:tasks-genai:0.10.11")
এর পরে, আপনি LlmInference
এর একটি উদাহরণ তৈরি করুন। আপনি জেমার সাথে যোগাযোগ করতে এই বস্তুটি ব্যবহার করেন:
val llmInference = LlmInference.createFromOptions( context, LlmInference.LlmInferenceOptions.builder() .setModelPath("/data/local/tmp/llm/gemma-2b-it-cpu-int8.bin") .build() )
.setModelPath
ব্যবহার করে পাথ সেটটি নোট করা গুরুত্বপূর্ণ। এই ডিভাইসে জেমা মডেলটি থাকে। gemma-2b
সংস্করণগুলি ব্যবহৃত জেমা মডেলটিও গুরুত্বপূর্ণ। 7b
সংস্করণগুলি এখনও MediaPipe দ্বারা সমর্থিত নয়, এর অর্থ কী তা পরে আরও বেশি। আপাতত মডেলটি ডাউনলোড করা যাক।
আপনি Kaggle থেকে Gemma ডাউনলোড করতে পারেন। ডেটা সায়েন্টিস্ট এবং মেশিন লার্নিং এর জন্য নিবেদিত একটি ওয়েবসাইট। মডেলগুলি ডাউনলোড করার আগে আপনাকে একটি অ্যাকাউন্ট তৈরি করতে হবে এবং ব্যবহারের শর্তাবলী স্বীকার করতে হবে৷ আপনি এখানে Gemma পৃষ্ঠাটি খুঁজে পেতে পারেন।
আপনি যদি এই পোস্টটি অনুসরণ করেন তবে TensorFlow Lite
ট্যাবের অধীনে শুধুমাত্র মডেলটির gemma-2b-it-cpu
সংস্করণগুলি ডাউনলোড করতে ভুলবেন না। আপনি যদি gemma-2b-it-gpu
সংস্করণগুলি চেষ্টা করেন তবে আপনি নিজেই আছেন।
মডেলটি ডাউনলোড হয়ে গেলে। .setModelPath
এ সেট করা পাথে মডেলটি আমদানি করতে Android স্টুডিওতে ডিভাইস এক্সপ্লোরার ব্যবহার করুন। আপনি যদি পাথ বা মডেলের নাম পরিবর্তন করে থাকেন তাহলে পথের নাম আপডেট করতে ভুলবেন না।
একবার মডেলটি আমদানি করা হলে আপনি .generateResponse
পদ্ধতি ব্যবহার করে Gemma-এ প্রম্পট পাস করা শুরু করতে পারেন। সাইমন বলে খেলার জন্য আমি জেমার কাছে যে প্রম্পট দিয়েছিলাম তার একটি উদাহরণ এখানে দেওয়া হল:
private const val SimonSaysPrompt = """ You are a Simon in a game of Simon Says. Your objective is to ask the player to perform tasks. For every task you give, you must prefix it with the words "Simon says". You must not ask the player to do anything that is dangerous, unethical or unlawful. Do not try to communicate with the player. Only ask the player to perform tasks. """ val gemmaResponse = llmInference.generateResponse(SimonSaysPrompt)
আপনি যদি আগে এলএলএম ব্যবহার করে থাকেন এবং প্রম্পট ইঞ্জিনিয়ারিং সম্পর্কে প্রাথমিক ধারণা থাকে তবে এটি পরিচিত দেখা উচিত। সতর্কতার দিক থেকে ভুল করার জন্য আমি প্রম্পটে সতর্কতামূলক নির্দেশাবলী অন্তর্ভুক্ত করেছি। আমরা চাই না সাইমন ব্যবহারকারীকে সন্দেহজনক কিছু করতে বলুক!
আপনি যদি এটি একটি ডিভাইসে চালানোর চেষ্টা করেন তবে কয়েকটি জিনিস ঘটতে পারে:
অ্যাপটি প্রতিক্রিয়া জানাতে এবং অবশেষে একটি প্রতিক্রিয়া প্রদান করতে অল্প সময় নিতে পারে।
অ্যাপটি ক্র্যাশ হতে পারে। Logcat এ খুঁজছেন আপনি MediaPipe মডেল খুঁজে পেতে অক্ষম সম্পর্কে বার্তা দেখতে পাবেন. আপনি কি সঠিক মডেল পথ সেট করেছেন?
অ্যাপটি ক্র্যাশ হতে পারে। আপনি যদি লগক্যাটে তাকান তবে আপনি প্রচুর নেটিভ কোড লগিং এবং মেমরি পুনর্ব্যবহৃত হওয়ার তথ্য দেখতে পাবেন।
আমার অভিজ্ঞতা দ্বিতীয় এবং তৃতীয় বিভাগে পড়ে। আপনি যদি সবকিছু সঠিকভাবে সেটআপ করেন এবং একটি উচ্চ বৈশিষ্ট্যযুক্ত শারীরিক ডিভাইস ব্যবহার করেন তবে আপনার নিজের অভিজ্ঞতাগুলি পরিবর্তিত হতে পারে।
আপনি যদি এই জিনিস ইথার না থাকে. আরেকটি বিকল্প আছে, এমুলেটরের মাধ্যমে উপলব্ধ RAM এর পরিমাণ বৃদ্ধি করা।
উপলব্ধ RAM এর পরিমাণ বৃদ্ধি সাধারণত একটি মেমরি নিবিড় পরিবেশে সাহায্য করে তাই কেন একটি মেমরি ক্ষুধার্ত এলএলএম অন্যরকম হবে? এটি করার জন্য আমি আমার অ্যান্ড্রয়েড এমুলেটর ব্যবহার করা RAM এর পরিমাণ কাস্টমাইজ করেছি।
আপনার যদি একটি বিদ্যমান এমুলেটর থাকে তবে আপনি লক্ষ্য করতে পারেন যে RAM ক্ষেত্রটি অক্ষম করা হয়েছে। আপনি ডিভাইস ম্যানেজারে এর ডানদিকে তিনটি বিন্দুতে ক্লিক করে এটির উপলব্ধ RAM এর পরিমাণ আপডেট করতে পারেন৷
ডিস্কে দেখান ক্লিক করুন এবং তারপরে একটি পাঠ্য সম্পাদকে config.ini এবং hardware-qemu.ini ফাইলগুলি খুলুন। প্রতিটি ফাইলে hw.ramSize
এর মান পরিবর্তন করুন। কিভাবে এটি করতে হয় তার উত্তর দেওয়ার জন্য এই স্ট্যাক ওভারফ্লো প্রশ্নে ধন্যবাদ।
বিকল্পভাবে আপনি অ্যান্ড্রয়েড স্টুডিওতে ডিভাইস ম্যানেজারে গিয়ে, ভার্চুয়াল ডিভাইস তৈরি করুন এবং তারপরে নতুন হার্ডওয়্যার প্রোফাইলে ক্লিক করে একটি কাস্টম এমুলেটর তৈরি করতে পারেন। কাস্টমাইজ করার বিকল্পগুলির অংশ হিসাবে আপনি RAM এর পরিমাণ নির্বাচন করতে পারেন।
আমি তুলনামূলকভাবে ভাল কাজ করার জন্য 8GB RAM পেয়েছি। আমি 22GB RAM এর সাথে আমার ভাগ্যও চেষ্টা করেছি। এটি গতির পরিপ্রেক্ষিতে সামান্য ভাল পারফর্ম করে, যদিও আমি যতটা আশা করেছিলাম ততটা নয়।
আমি সন্দেহ করি যে যখন জেমা মেমরিতে লোড করা হয় তখন কোথাও কোনও বাধা রয়েছে, কারণ বাকি এমুলেটরটি তরলভাবে চলে। সম্ভবত একটি উন্নতি কোথাও করা যেতে পারে।
MediaPipe-এর সাথে সামঞ্জস্যপূর্ণ জেমা মডেলগুলি হল gemma-2b
সংস্করণ। 2b
মানে 2 বিলিয়ন প্যারামিটার। মডেল কাজ করতে একসঙ্গে কাজ করা পরামিতি পরিমাণ.
আপনি যখন জেমাকে একটি প্রশ্ন জিজ্ঞাসা করেন তখন একে অপরের মধ্যে সংযোগ এবং অনুমান প্রদান করতে প্রশিক্ষণের সময় মডেলের মধ্যে এই মানগুলি সেট করা হয়।
এছাড়াও একটি gemma-7b
সংগ্রহ রয়েছে, যা 7 বিলিয়ন প্যারামিটার ব্যবহার করে। এগুলি যদিও MediaPipe দ্বারা সমর্থিত নয়৷ হয়তো এক দিন!
আপনি যদি এলএলএম-এর ক্ষেত্রে প্যারামিটারগুলি সম্পর্কে আরও বুঝতে আগ্রহী হন তবে আমি এই পৃষ্ঠাটি সুপারিশ করি।
একটি 2 বিলিয়ন প্যারামিটার মডেল লোড করা এবং একটি মোবাইল ডিভাইসে চালানো একটি চিত্তাকর্ষক কৃতিত্ব। যদিও এটা কিভাবে ভাল কাজ করে? খুঁজে বের কর.
gemma-2b-it-cpu-int4
হল একটি 4 বিট এলএলএম। এর মানে মডেল দ্বারা ব্যবহৃত প্রতিটি প্যারামিটারের মেমরির আকার 4 বিট রয়েছে। এখানে সুবিধা হল মডেলের মোট আকার ছোট, তবে প্রতিটি প্যারামিটারের জন্য মেমরির আকার হ্রাস মানে মডেলের নির্ভুলতা এবং গুণমানও প্রভাবিত হয়।
তাহলে কিভাবে gemma-2b-it-cpu-int4
সঞ্চালন করে? সৎ হতে এত মহান না. উপরের প্রম্পটটি ব্যবহার করে এবং এটিকে সাধারণ প্রশ্ন জিজ্ঞাসা করে সাইমন সেজ চালানোর জন্য আমার প্রচেষ্টার কয়েকটি স্ক্রিনশট এখানে রয়েছে।
প্রতিক্রিয়াগুলি অপ্রত্যাশিত ছিল এবং মডেলটিকে সাইমন সেজের একটি গেমের মতো কিছু করতে পেরে হতাশাজনক ছিল। এটি একটি ভিন্ন বিষয়ে এবং ভুল তথ্যের হ্যালুসিনেশনে চলে যাবে।
হ্যালুসিনেশন হল একটি ফিনিমা যেখানে এলএলএমরা মিথ্যা এবং অসত্য কথা বলে যেন সেগুলি সত্য। উপরের উদাহরণটি নিন, এটি সত্য নয় যে আপনি 60 মাইল প্রতি ঘন্টায় 60 মিনিটে মঙ্গল গ্রহে যেতে পারবেন। যাইহোক এখনও না. 😃
প্রসঙ্গ সচেতনতার অভাবও ছিল। এর অর্থ এটি এমন কিছু মনে করতে পারেনি যা আমি একটি কথোপকথনে আগে উল্লেখ করেছি। এটি সম্ভবত মডেলের সীমাবদ্ধ আকারের কারণে।
কিছুক্ষণ পরে আমি এই মডেলটি ছেড়ে দিয়েছি এবং বড় 8 বিট আকারের মডেলটি চেষ্টা করার সিদ্ধান্ত নিয়েছি।
gemma-2b-it-cpu-int8
হল একটি 8 বিট এলএলএম। এটি আকারে তার 4 বিট ভাইবোনের থেকে বড়। এর অর্থ এটি আরও সঠিক হতে পারে এবং আরও ভাল মানের উত্তর দিতে পারে। তাহলে এখানে ফলাফল কি ছিল?
এই মডেলটি সাইমন সেসের ধারণাটি উপলব্ধি করতে সক্ষম হয়েছিল, অবিলম্বে সাইমনের ভূমিকা গ্রহণ করে। দুর্ভাগ্যবশত এটিও প্রসঙ্গ সচেতনতার অভাবের শিকার হয়েছে।
এটি মোকাবেলা করার জন্য আমাকে সাইমন সেজের নিয়মগুলির সাথে প্রতিবার মডেলটিকে পুনরায় প্রম্পট করতে হবে এবং এটিকে একটি টাস্ক প্রদান করতে বলার জন্য অন্য প্রম্পটের সাথে একত্রিত করতে হবে।
টাস্ক প্রম্পটগুলি এলোমেলোভাবে তালিকা থেকে বাছাই করা হয় জেমা-তে পাস করার জন্য, জিজ্ঞাসা করা কাজগুলিতে কিছুটা বৈচিত্র্য দেয়।
নীচে কী ঘটছে তার একটি উদাহরণ এখানে দেওয়া হল:
private const val SimonSaysPrompt = """ You are a Simon in a game of Simon Says. Your objective is to ask the player to perform tasks. For every task you give, you must prefix it with the words "Simon says". You must not ask the player to do anything that is dangerous, unethical or unlawful. Do not try to communicate with the player. Only ask the player to perform tasks. """ private const val MovePrompt = SimonSaysPrompt + """ Give the player a task related to moving to a different position. """ private const val SingASongPrompt = SimonSaysPrompt + """ Ask the player to sing a song of their choice. """ private const val TakePhotoPrompt = SimonSaysPrompt + """ Give the player a task to take a photo of an object. """ private val prompts = listOf( MovePrompt, SingASongPrompt, TakePhotoPrompt ) val prompt = prompts.random() val response = llmInference.generateResponse(prompt)
এটি মাঝে মাঝে একটি কার্ভ বল প্রতিক্রিয়া নিক্ষেপ করে যা চরিত্রের বাইরে বলে মনে হয়। আমি এটিকে মডেলের আকারে রাখছি। এটি শুধুমাত্র v1 বিবেচনা করা মূল্যবান।
একবার প্রম্পটগুলি পাথরে সেট হয়ে গেলে আমি দেখেছিলাম যে এটি শুধুমাত্র প্রম্পটের উপর নির্ভর করা এবং ব্যবহারকারীর ইনপুটকে বিবেচনায় না নেওয়ার জন্য দরকারী। মডেলটিতে প্রসঙ্গ সচেতনতার অভাব থাকায় ব্যবহারকারীর ইনপুট এটিকে সাইমন সেজ খেলা বন্ধ করে দেয় এবং পরিবর্তে ইনপুটে সাড়া দেয়।
এই বিট কৌতুক যোগ করা একটি সন্তোষজনক ফলাফল ছিল না, কিন্তু সাইমন বলে খেলা জেমা রাখা প্রয়োজন.
তাহলে জেমা কি অ্যান্ড্রয়েড ডিভাইসে সাইমন সেজ খেলতে পারে? আমি বলতে যাচ্ছি "ধরনের, সাহায্যে"।
আমি Gemma 2b এর 4 বিট সংস্করণটি আরও স্বজ্ঞাতভাবে প্রতিক্রিয়া দেখতে চাই। প্রতিটি অনুরোধের জন্য এটিকে পুনরায় অনুরোধ করার প্রয়োজন এড়াতে Gemma 2b প্রসঙ্গে সচেতন করা এবং ব্যবহারকারীর ইনপুট নিয়ে সতর্ক থাকাও সাহায্য করবে।
সহজ অনুরোধের জন্য শুধুমাত্র একটি একক প্রম্পট প্রয়োজন। আমি দেখতে পাচ্ছি Gemma 2b আরামদায়কভাবে এই কাজগুলি পরিচালনা করতে সক্ষম।
এটি মনে রাখা মূল্যবান যে এইগুলি মডেলগুলির v1। তারা একটি মোবাইল অপারেটিং সিস্টেম চালায় এবং কাজ করে তা একটি চিত্তাকর্ষক কৃতিত্ব!
মোবাইল ডিভাইসে এলএলএম-এর ভবিষ্যত কী হবে? আমি দেখতে দুটি বাধা আছে. হার্ডওয়্যার সীমাবদ্ধতা এবং ব্যবহারিক ব্যবহারের ক্ষেত্রে।
আমি মনে করি আমরা এমন একটি বিন্দুতে আছি যেখানে শুধুমাত্র উচ্চ প্রান্তের ডিভাইসগুলি কার্যকরভাবে এই মডেলগুলি চালাতে পারে। যে ডিভাইসগুলি মনে আসে তা হল পিক্সেল 7 বা পিক্সেল 8 সিরিজের ফোনগুলি তাদের টেনসর জি চিপ সহ, এবং অ্যাপল আইফোন তাদের নিউরাল ইঞ্জিন চিপ সহ।
আমাদের এই ধরণের স্পেসিফিকেশনগুলি মিড-রেঞ্জের ফোনগুলিতে ফিল্টার করা দেখতে হবে।
ডিভাইস এলএলএমগুলি পুনরুদ্ধার অগমেন্টেড জেনারেশনে ট্যাপ করা থেকে আকর্ষণীয় ধারণা আসতে পারে। উত্তর দেওয়ার সময় অতিরিক্ত প্রসঙ্গ পুনরুদ্ধার করতে LLM-এর জন্য বহিরাগত ডেটা উত্সগুলির সাথে যোগাযোগ করার একটি কৌশল। এটি কর্মক্ষমতা বাড়ানোর একটি কার্যকর উপায় হতে পারে।
দ্বিতীয় বাধা হল ব্যবহারিক ব্যবহারের ক্ষেত্রে খুঁজে পাওয়া। আমি মনে করি এইগুলি সীমিত যখন ডিভাইসগুলি ইন্টারনেটে আরও শক্তিশালী এলএলএম-এর সাথে যোগাযোগ করতে পারে। উদাহরণস্বরূপ OpenAI থেকে GPT-4 একটি ট্রিলিয়ন প্যারামিটারের বেশি সমর্থন করার জন্য গুজব!
এমন একটি সময় আসতে পারে যেখানে মোবাইল ডিভাইসে এই মডেলগুলি স্থাপনের খরচ ক্লাউডে হোস্ট করার চেয়ে সস্তা হয়ে যায়। যেহেতু খরচ কমানো আজকাল সব রাগ আমি এটি একটি কার্যকর ব্যবহার ক্ষেত্রে দেখতে পাচ্ছি.
আপনার নিজের ব্যক্তিগত এলএলএম থাকার গোপনীয়তা সুবিধাও রয়েছে, আপনার ডিভাইসের সীমাবদ্ধতা ছাড়াই কোনো তথ্য। একটি দরকারী সুবিধা যা গোপনীয়তা সচেতন অ্যাপ ব্যবহারকারীদের কাছে আবেদন করবে।
আমার বাজি হল ডিভাইসে নিয়মিতভাবে মোতায়েন করা LLM থেকে আমরা এখনও কয়েক বছর দূরে আছি।
আপনি যদি একটি মোবাইল ডিভাইসে নিজের জন্য Gemma ব্যবহার করতে আগ্রহী হন তবে এখানে সাহায্য করার জন্য কিছু সংস্থান রয়েছে:
জেমা : অফিসিয়াল জেমা ওয়েবসাইটটিতে বেঞ্চমার্ক, দ্রুত সূচনা নির্দেশিকা এবং দায়ী জেনারেটিভ এআই বিকাশের জন্য গুগলের পদ্ধতির তথ্য সহ প্রচুর তথ্য রয়েছে।
MediaPipe : MediaPipe এর নিজস্ব Google ডেভেলপার বিভাগ রয়েছে যেখানে আপনি এটি সম্পর্কে আরও জানতে পারবেন এবং এটি কীভাবে ব্যবহার করবেন। অত্যন্ত বাঞ্ছনীয় পড়া.
গুগল ডেভেলপার গ্রুপ ডিসকর্ড : গুগল ডেভেলপার গ্রুপ ডিসকর্ড জেনারেটিভ এআই-কে উৎসর্গ করেছে চ্যানেল। সমমনা মানুষের সাথে চ্যাট করতে #gemma, #gemini এবং #ml চ্যানেলগুলি দেখুন।
Simons Says App: ক্লোন করুন এবং এই ব্লগ পোস্টের নমুনা কোড চালান যাতে এটি কার্যকর হয়। এটি MediaPipe থেকে ইমেজ ক্লাসিফিকেশন টাস্কের ব্যবহারও অন্তর্ভুক্ত করে। সেটআপ নির্দেশাবলী README-এ রয়েছে।
একটি IO থ্রেড থেকে LLM অনুমান কল করার উল্লেখ করার জন্য 23/03/24 আপডেট করা হয়েছে
এই পোস্টটি লেখার পরে আমার মনে হয়েছে যে জেমাকে কল করা একটি ফাইলে পড়া/লেখার অপারেশন। .generateResponse()
পদ্ধতিটিকে একটি IO থ্রেডে সরিয়ে দিলে জেমা মেমরিতে লোড হওয়ার সময় বিশাল জ্যাঙ্ক এড়াবে:
suspend fun sendMessage(): String { return withContext(Dispatchers.IO) { val prompt = prompts.random() llmInference.generateResponse(prompt) } }
এছাড়াও এখানে উপস্থিত হয়.