ਇੱਕ ਤਿੰਨ-ਪੱਧਰੀ ਪ੍ਰਾਇਓਰਿਟੀ ਸ਼ੈਡਿਊਲਰ ਡਿਵਾਈਸ 'ਤੇ ਲੈਂਗੂਏਜ-ਮਾਡਲ ਦੀ ਲੇਟੈਂਸੀ (latency) ਨੂੰ ਇੱਕ ਸੈਕਿੰਡ ਤੋਂ ਵੱਧ ਤੋਂ ਘਟਾ ਕੇ ਦੋ-ਦਸਵੇਂ ਹਿੱਸੇ ਦੇ ਸੈਕਿੰਡ ਤੋਂ ਵੀ ਘੱਟ ਕਰ ਦਿੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਚੈਟ ਐਪਸ ਉਦੋਂ ਵੀ ਰਿਸਪੌਂਸਿਵ ਰਹਿੰਦੀਆਂ ਹਨ ਜਦੋਂ ਫ਼ੋਨ ਬੈਕਗ੍ਰਾਊਂਡ ਕੰਮਾਂ ਵਿੱਚ ਰੁੱਝਿਆ ਹੋਵੇ। 3 ਬਿਲੀਅਨ-ਪੈਰਾਮੀਟਰ ਮਾਡਲ ਚਲਾਉਣ ਵਾਲੇ Tensor G3 ਚਿੱਪ ਲਈ ਬਣਾਇਆ ਗਿਆ ਇਹ ਸ਼ੈਡਿਊਲਰ, ਬੈਕਗ੍ਰਾਊਂਡ ਕੰਮਾਂ ਨੂੰ ਰੋਕੇ ਬਿਨਾਂ ਲੇਟੈਂਸੀ ਨੂੰ 1,420 ms ਤੋਂ ਘਟਾ ਕੇ 161 ms ਕਰ ਦਿੰਦਾ ਹੈ।

ਡਿਵਾਈਸ 'ਤੇ ਚੱਲਣ ਵਾਲੇ LLMs ਨੂੰ ਕਿਉਂ ਮੁਸ਼ਕਲ ਆਉਂਦੀ ਹੈ

ਮੋਬਾਈਲ ਪ੍ਰੋਸੈਸਰ 'ਤੇ ਇੱਕ ਵੱਡਾ ਲੈਂਗੂਏਜ ਮਾਡਲ ਚਲਾਉਣਾ ਸਰੋਤਾਂ (resources) ਦੀ ਕਮੀ ਵਾਲਾ ਕੰਮ ਹੈ। Tensor G3 'ਤੇ, 3 B ਮਾਡਲ ਪਹਿਲਾਂ ਹੀ ਨਿਊਰਲ-ਪ੍ਰੋਸੈਸਿੰਗ ਯੂਨਿਟ (NPU) ਦਾ ਲਗਭਗ 85% ਹਿੱਸਾ ਵਰਤ ਲੈਂਦਾ ਹੈ। ਜਦੋਂ ਕੋਈ ਘੱਟ-ਪ੍ਰਾਇਓਰਿਟੀ ਵਾਲਾ ਕੰਮ—ਜਿਵੇਂ ਕਿ ਇੱਕ ਆਫਲਾਈਨ ਇੰਡੈਕਸਰ—ਉਸੇ ਸਮੇਂ ਚੱਲ ਰਿਹਾ ਹੋਵੇ ਜਦੋਂ ਯੂਜ਼ਰ ਚੈਟ ਵਿੰਡੋ ਖੋਲ੍ਹਦਾ ਹੈ, ਤਾਂ ਪ੍ਰਤੀਭਾਸ਼ਿਤ ਰਿਸਪੌਂਸ ਟਾਈਮ ਲਗਭਗ 140 ms ਤੋਂ ਵਧ ਕੇ 1,400 ms ਹੋ ਜਾਂਦਾ ਹੈ, ਜੋ ਕਿ ਦਸ ਗੁਣਾ ਦੀ ਅਜਿਹੀ ਸੁਸਤੀ ਹੈ ਜਿਸ ਨੂੰ ਯੂਜ਼ਰ ਤੁਰੰਤ ਮਹਿਸੂਸ ਕਰਦੇ ਹਨ।

ਸਮੱਸਿਆ ਸਿਰਫ਼ ਰਫ਼ਤਾਰ ਦੀ ਨਹੀਂ ਹੈ। ਮੋਬਾਈਲ ਡਿਵਾਈਸਾਂ ਨੂੰ UI ਦੀ ਮੁਲਾਇਮਤਾ, ਬੈਟਰੀ ਲਾਈਫ, ਅਤੇ ਕਈ ਐਪਸ ਵਿਚਕਾਰ ਸੰਤੁਲਨ ਬਣਾਉਣਾ ਪੈਂਦਾ ਹੈ ਜੋ ਸਾਰੇ ਕੰਪਿਊਟਿੰਗ ਦੀ ਮੰਗ ਕਰਦੇ ਹਨ। ਇੱਕ ਸਾਧਾਰਨ ਕਿਊ (queue) ਜੋ ਕੰਮਾਂ ਨੂੰ ਕ੍ਰਮ ਅਨੁਸਾਰ ਪ੍ਰੋਸੈਸ ਕਰਦੀ ਹੈ, ਉਹ UI ਥ੍ਰੈਡ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਕੰਮਾਂ ਲਈ ਉਡੀਕਣ ਲਈ ਮਜਬੂਰ ਕਰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਇੱਕ ਗੱਲਬਾਤ ਕਰਨ ਵਾਲਾ ਸਹਾਇਕ (conversational assistant) ਇੱਕ ਸੁਸਤ ਅਨੁਭਵ ਵਿੱਚ ਬਦਲ ਜਾਂਦਾ ਹੈ।

ਤਿੰਨ-ਪੱਧਰੀ ਸ਼ੈਡਿਊਲਰ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ

ਨਵਾਂ ਸ਼ੈਡਿਊਲਰ ਇਨਫਰੈਂਸ ਪਾਈਪਲਾਈਨ (inference pipeline) ਵਿੱਚ ਤਿੰਨ ਤਾਲਮੇਲ ਵਾਲੇ ਹਿੱਸੇ ਜੋੜਦਾ ਹੈ:

  1. ਪ੍ਰਾਇਓਰਿਟੀ ਕਿਊ (Priority Queue) – ਇੱਕ min-heap ਜੋ ਆਉਣ ਵਾਲੇ ਕੰਮਾਂ ਨੂੰ ਇੱਕ ਸਥਿਰ ਮਹੱਤਤਾ ਦੇ ਪੱਧਰ ਅਨੁਸਾਰ ਕ੍ਰਮਬੱਧ ਕਰਦਾ ਹੈ।
  2. ਪ੍ਰੀਐਮਪਸ਼ਨ ਕੰਟਰੋਲਰ (Preemption Controller) – ਜਦੋਂ ਕੋਈ ਉੱਚ-ਪ੍ਰਾਇਓਰਿਟੀ ਵਾਲੀ ਬੇਨਤੀ ਆਉਂਦੀ ਹੈ, ਤਾਂ ਇਹ ਘੱਟ-ਪ੍ਰਾਇਓਰਿਟੀ ਵਾਲੇ ਕੰਮਾਂ ਨੂੰ ਰੱਦ ਕਰਨ ਦੀ ਬਜਾਏ ਉਹਨਾਂ ਨੂੰ ਰੋਕ (pause) ਦਿੰਦਾ ਹੈ।
  3. ਟੋਕਨ ਬਜਟ ਗਵਰਨਰ (Token Budget Governor) – ਐਪ ਦੀ ਲਾਈਫਸਾਈਕਲ ਸਟੇਟ ਦੇ ਅਧਾਰ 'ਤੇ ਇੱਕ ਕੰਮ ਦੁਆਰਾ ਤਿਆਰ ਕੀਤੇ ਜਾ ਸਕਣ ਵਾਲੇ ਟੋਕਨਾਂ ਦੀ ਗਿਣਤੀ ਨੂੰ ਸੀਮਤ ਕਰਦਾ ਹੈ।

ਇਹ ਮਿਲ ਕੇ ਇੱਕ ਫੋਰਗ੍ਰਾਊਂਡ ਚੈਟ ਬੇਨਤੀ ਨੂੰ ਲਾਈਨ ਵਿੱਚ ਸਭ ਤੋਂ ਅੱਗੇ ਆਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੇ ਹਨ, ਜਦੋਂ ਕਿ ਬੈਕਗ੍ਰਾਊਂਡ ਕੰਮ ਇੱਕ 'ਪਾਰਕਡ' (parked) ਸਟੇਟ ਵਿੱਚ ਰਹਿੰਦੇ ਹਨ, ਜੋ ਸਰੋਤ ਖਾਲੀ ਹੋਣ 'ਤੇ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਹੋਣ ਲਈ ਤਿਆਰ ਹੁੰਦੇ ਹਨ।

ਪ੍ਰਾਇਓਰਿਟੀ ਪੱਧਰ ਅਤੇ ਪ੍ਰੀਐਮਪਸ਼ਨ

ਚਾਰ ਪੱਧਰ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਨ ਕਿ ਕਿਸ ਨੂੰ ਰੋਕਿਆ ਜਾ ਸਕਦਾ ਹੈ:

ਪੱਧਰ (Tier) ਵੇਰਵਾ (Description)
ਫੋਰਗ੍ਰਾਊਂਡ ਚੈਟ (Foreground Chat) ਮਹੱਤਵਪੂਰਨ UI ਇੰਟਰੈਕਸ਼ਨ
ਇਨਲਾਈਨ ਸੁਝਾਅ (Inline Suggestion) ਆਟੋ-ਕੰਪਲੀਟ ਸ਼ੈਲੀ ਦੇ ਹਿੰਟਸ
ਬੈਕਗ੍ਰਾਊਂਡ ਸਾਰ (Background Summary) ਸਮੇਂ-ਸਮੇਂ 'ਤੇ ਸਮੱਗਰੀ ਦਾ ਸਾਰ (summarisation)
ਆਫਲਾਈਨ ਇੰਡੈਕਸਿੰਗ (Offline Indexing) ਬਲਕ ਡੇਟਾ ਪ੍ਰੋਸੈਸਿੰਗ

ਸ਼ੈਡਿਊਲਰ ਕਦੇ ਵੀ ਘੱਟ-ਪ੍ਰਾਇਓਰਿਟੀ ਵਾਲੇ ਕੰਮ ਨੂੰ ਰੱਦ ਨਹੀਂ ਕਰਦਾ। ਇਸ ਦੀ ਬਜਾਏ, ਇਹ ਮਾਡਲ ਦੇ ਕੀ-ਵੈਲਯੂ (KV) ਕੈਸ਼ ਦਾ ਇੱਕ ਸਨੈਪਸ਼ੌਟ ਲੈਂਦਾ ਹੈ—ਇੱਕ ਅਜਿਹਾ ਢਾਂਚਾ ਜੋ ਵਿਚਕਾਰਲੇ ਅਟੈਂਸ਼ਨ ਨਤੀਜਿਆਂ ਨੂੰ ਰੱਖਦਾ ਹੈ—ਅਤੇ ਕੰਮ ਨੂੰ ਰੋਕ ਦਿੰਦਾ ਹੈ। ਜਦੋਂ ਉੱਚ-ਪ੍ਰਾਇਓਰਿਟੀ ਵਾਲੀ ਬੇਨਤੀ ਖਤਮ ਹੋ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਕੰਟਰੋਲਰ ਸਨੈਪਸ਼ੌਟ ਨੂੰ ਬਹਾਲ ਕਰ ਦਿੰਦਾ ਹੈ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ ਟਾਸਕ ਨੂੰ ਉੱਥੋਂ ਹੀ ਸ਼ੁਰੂ ਕਰਨ ਦਿੰਦਾ ਹੈ ਜਿੱਥੇ ਉਹ ਰੁਕਿਆ ਸੀ। ਇਹ "ਪੌਜ਼-ਐਂਡ-ਰੀਜ਼ਿਊਮ" (pause-and-resume) ਪਹੁੰਚ ਉਸ ਖ਼ਰਚੀਲੇ ਮੁੜ-ਗਣਨਾ (recomputation) ਤੋਂ ਬਚਾਉਂਦੀ ਹੈ ਜੋ ਉਦੋਂ ਹੁੰਦੀ ਜੇ ਕੰਮ ਨੂੰ ਸ਼ੁਰੂ ਤੋਂ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕੀਤਾ ਜਾਂਦਾ।

ਅੰਸ਼ਿਕ KV-ਕੈਸ਼ ਇਵਿਕਸ਼ਨ (eviction) ਫਾਲਤੂ ਕੰਮ ਨੂੰ ਹੋਰ ਘਟਾਉਂਦਾ ਹੈ। ਸਥਿਰ ਸਿਸਟਮ ਪ੍ਰੋਂਪਟ ਕੈਸ਼ ਵਿੱਚ ਰਹਿੰਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਸਿਰਫ਼ ਡਾਇਨਾਮਿਕ ਗੱਲਬਾਤ ਦੇ ਮੋੜਾਂ ਨੂੰ ਹੀ ਬਾਹਰ ਕੱਢਿਆ ਜਾਂਦਾ ਹੈ। ਨਤੀਜੇ ਵਜੋਂ, ਰੁਕਣ ਤੋਂ ਬਾਅਦ ਮਾਡਲ ਨੂੰ ਮੁੜ-ਪ੍ਰੀਫਿਲ (re-prefilling) ਕਰਨ ਦੀ ਲਾਗਤ ਵਿੱਚ 40%–60% ਦੀ ਕਮੀ ਆਉਂਦੀ ਹੈ।

ਟਾਈਮਰਾਂ ਤੋਂ ਬਿਨਾਂ ਟੋਕਨ ਬਜਟ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ

ਕਈ ਇੰਪਲੀਮੈਂਟੇਸ਼ਨਾਂ ਇਸ ਗੱਤੇ ਲਈ ਟਾਈਮਰਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ ਕਿ ਕੰਮ ਨੂੰ ਕਦੋਂ CPU ਜਾਂ NPU ਸਮਾਂ ਛੱਡ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ। ਟਾਈਮਰ ਅਸਪਸ਼ਟ ਹੁੰਦੇ ਹਨ; ਉਹ ਜਾਂ ਤਾਂ UI ਨੂੰ ਰੋਕ ਸਕਦੇ ਹਨ ਜਾਂ ਚਿੱਪ ਦੀ ਘੱਟ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਨ। ਸ਼ੈਡਿਊਲਰ ਟਾਈਮਰਾਂ ਦੀ ਜਗ੍ਹਾ Android ਦੇ ProcessLifecycleOwner ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜੋ ਲਾਈਫਸਾਈਕਲ ਇਵੈਂਟਸ (lifecycle events) ਜਾਰੀ ਕਰਦਾ ਹੈ ਜੋ ਭਰੋਸੇਯੋਗ ਤਰੀਕੇ ਨਾਲ ਦੱਸਦੇ ਹਨ ਕਿ ਐਪ ਫੋਰਗ੍ਰਾਊਂਡ ਵਿੱਚ ਹੈ ਜਾਂ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ।

  • ON_RESUME – ਐਪ ਪੂਰਾ ਕੰਪਿਊਟ ਬਜਟ ਦੁਬਾਰਾ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਲਟਕਦੇ ਫੋਰਗ੍ਰਾਊਂਡ ਕੰਮ ਬਿਨਾਂ ਕਿਸੇ ਰੁਕਾਵਟ ਦੇ ਚੱਲ ਸਕਦੇ ਹਨ।
  • ON_STOP – ਐਪ ਬੈਕਗ੍ਰਾਊਂਡ ਟਾਸਕਾਂ ਨੂੰ ਉਹਨਾਂ ਦੇ ਆਮ ਟੋ