পাঠ্যক্রম খুলুন
অগ্রসর পর্যায়

LLM Model Serving: request, inference ও streaming

Model Serving and Streaming

এই পাঠের কুইজ ↓৫ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • LLM request-এর application ও inference স্তর দেখুন
  • Time-to-first-token ও completion latency আলাদা করুন
  • Streaming disconnect ও cancellation সামলান

সমস্যা দিয়ে শুরু

Bangla support assistant উত্তর দিতে বারো সেকেন্ড নিচ্ছে। Browser ফাঁকা থাকে বলে user আবার Send চাপছেন। এক request-এর বদলে বহু inference চলছে। Team ভাবছে streaming দিলেই GPU computation কমবে; আসলে perceived wait এবং total কাজ আলাদা।

সহজ করে বুঝি

LLM application authentication, context retrieval, policy ও tool handling করে; inference server model token তৈরি করে। Prefill input process করে, decode পরের tokens তৈরি করে। Streaming তৈরি হওয়া অংশ আগেই পাঠায়। Time-to-first-token প্রথম text-এর অপেক্ষা; total completion পুরো উত্তর শেষ হওয়ার সময়।

পরিচিত একটি উপমা

রাঁধুনি পুরো খাবার তৈরি শেষে একসঙ্গে দিতে পারেন, অথবা একেক পদ তৈরি হলে পরিবেশন করতে পারেন। দ্বিতীয় পদ্ধতিতে অপেক্ষা কম মনে হয়, কিন্তু রান্না নিজে অদৃশ্যভাবে দ্রুত হয় না। গ্রাহক চলে গেলে পরের পদ বন্ধ করার আলাদা নির্দেশ দরকার।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

LLM request-এর application ও inference স্তর দেখুন
Diagram-এর text flow দেখুন
flowchart LR
 B[Browser] --> A[Laravel API]
 A --> R[Retrieve Context]
 R --> G[Inference Gateway]
 G --> M[Model Server]
 M -->|Token deltas| G
 G -->|SSE| A
 A -->|SSE| B

Laravel user ও quota যাচাই করে context আনে। Gateway configured model server-এ generation পাঠায়। Token delta ফিরলে SSE frame হিসেবে browser-এ যায়। Browser disconnect করলে server-side generation cancel করার capability থাকলে propagate করুন; HTTP connection বন্ধ হলেই সব inference থামে ধরে নেওয়া যাবে না।

PHP ও Laravel-এ প্রয়োগ

Laravel controller stream fragment; $gateway একটি app-defined service, streamText iterable string delta দেয়। Endpoint POST fetch-stream বা উপযুক্ত authorized channel ব্যবহার করবে; browser EventSource নিজে POST করে না। Gateway timeout, error event ও cancellation implementation আলাদা লাগবে।

php
return response()->stream(function () use ($gateway, $validated) {
    foreach ($gateway->streamText($validated['question']) as $delta) {
        if (connection_aborted()) {
            break;
        }
        echo 'data: '.json_encode(
            ['delta' => $delta],
            JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR,
        )."\n\n";
        if (ob_get_level() > 0) ob_flush();
        flush();
    }
    echo "event: done\ndata: {}\n\n";
}, 200, [
    'Content-Type' => 'text/event-stream',
    'Cache-Control' => 'no-cache',
    'X-Accel-Buffering' => 'no',
]);

এটি PHP 8.3+ ও Laravel 12-এর শিক্ষামূলক fragment; সম্পূর্ণ application নয়। সংশ্লিষ্ট route-এ authentication ও resource authorization প্রয়োগ করতে হবে। নিচের অনুশীলনে failure ইচ্ছা করে তৈরি করুন; শুধু সফল response দেখে correctness ধরে নেবেন না।

সুবিধা, সীমাবদ্ধতা ও trade-off

Streaming perceived responsiveness ও partial progress দেয়। Proxy buffering, client reconnect এবং partial unsafe output handling কঠিন হয়। Long-lived PHP request worker ধরে রাখতে পারে; queue-based generation ও separate streaming gateway বেশি load-এ মানাতে পারে, কিন্তু শুরুতেই দরকার নয়।

সাধারণ ভুল

  • Streamed partial answer-কে complete record হিসেবে save করা।
  • Proxy buffering রেখে SSE দিলেই instant text আশা করা।
  • Browser disconnect হলেও server cost থামে ধরে নেওয়া।

আরও একটু গভীরে

Batching inference throughput বাড়াতে পারে কিন্তু scheduling wait যোগ করে। KV cache model context-এর computation state; application response cache-এর সমান নয়। Deployment budget-এ concurrent sequence, context length ও GPU memory সম্পর্ক মাপতে হবে।

First byte, first visible token এবং final done event-এর সময় মাপুন। মাঝখানে tab বন্ধ করে model job state দেখুন। Partial response-এ disconnected label রাখুন। যে request শেষ হয়নি সেটিকে billing ও retry-তে নতুন identity দেওয়ার আগে policy নির্ধারণ করুন।

মনে রাখুন

  • App orchestration ও inference পৃথক।
  • Streaming latency perception বদলায়।
  • Disconnect একটি recovery scenario।

নিজে চেষ্টা করুন

Chat request state machine লিখুন: queued, generating, completed, cancelled, failed। প্রতিটির UI এবং retry identity নির্ধারণ করুন।

নিজের বোঝা যাচাই করুন

1. Streaming compute কমায়?

নিজে নয়। তৈরি text আগেই পাঠায়; model generation এখনও চলে, cancellation আলাদা।

2. TTFT কী?

Request থেকে প্রথম token দেখার সময়; total answer latency থেকে আলাদা।

3. EventSource POST করে?

Native EventSource সাধারণত GET করে; POST streaming-এর জন্য fetch বা অন্য channel লাগবে।

4. Gateway কেন?

Provider contract, timeout ও model routing এক জায়গায় রাখতে; এটি model নিজে নয়।

5. Disconnect হলে?

Partial result ও cancellation track করুন; downstream server-এ কাজ থামার নিশ্চয়তা যাচাই করুন।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।