Google рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Gemma 3 270M рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИтАФ270 рдорд┐рд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрд▓реНрдЯреНрд░рд╛-рдХреЙрдореНрдкреИрдХреНрдЯ рдореЙрдбрд▓, рдЬреЛ рдХреБрд╢рд▓ AI рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдПрдХ рдирдП рдкреИрд░рд╛рдмрд┐рдЧреНрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢рд╛рд▓ рдЬрдирд░рд▓-рдкрд░реНрдкрдЬрд╝ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, Gemma 3 270M рдХреЛ рдЯрд╛рд╕реНрдХ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ Gemma 3 270M рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рджрд┐рдЦрд╛рдКрдБрдЧрд╛ рдФрд░ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдпрд╣ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░реАрди рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдмреЗрд╣рдж рддреЗрдЬрд╝ рдЗрдиреНрдлрд░реЗрдВрд╕, рдмрд╣реБрдд рдХрдо рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде
рдмреЗрд╣рдж рдЕрдзрд┐рдХ рдКрд░реНрдЬрд╛ рджрдХреНрд╖рддрд╛ (Pixel 9 Pro рдкрд░ 25 рдмрд╛рддрдЪреАрддреЛрдВ рдореЗрдВ рдорд╛рддреНрд░ 0.75% рдмреИрдЯрд░реА рдЙрдкрдпреЛрдЧ)
INT4 рдкреНрд░рд┐рд╕рд┐рд╢рди рдХреЗ рд╕рд╛рде рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдиреНрдпреВрдирддрдо рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рд▓реЙрд╕
рдкреВрд░реНрдг рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдкреВрд░реНрдг рдЧреЛрдкрдиреАрдпрддрд╛
рд╣рдо рдЕрдкрдиреЗ рдкрд╛рдардХреЛрдВ рдХреЛ рдирд╡реАрдирддрдо AI рдЕрдкрдбреЗрдЯреНрд╕ рд╕реЗ рдЕрд╡рдЧрдд рд░рдЦрддреЗ рд╣реИрдВ The Median рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗтАФрд╣рдорд╛рд░рд╛ рдореБрдлрд╝реНрдд рд╢реБрдХреНрд░рд╡рд╛рд░ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░, рдЬреЛ рд╣рдлрд╝реНрддреЗ рдХреА рдкреНрд░рдореБрдЦ рдЦрдмрд░реЛрдВ рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИред рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВ рдФрд░ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ:
Gemma 3 270M рдХреНрдпрд╛ рд╣реИ?
Gemma 3 270M рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди рдореЙрдбрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ 270 рдорд┐рд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдордЬрд╝рдмреВрдд рдирд┐рд░реНрджреЗрд╢-рдЕрдиреБрд╕рд░рдг рдФрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЯреЗрдХреНрд╕реНрдЯ рдЬреЗрдирд░реЗрд╢рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ Gemma 3 рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рджрд╕реНрдп рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдмрдбрд╝реЗ рд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдЬреИрд╕реЗ Gemma 3 1B рдФрд░ 4B рдХреА рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЯреНрд░реЗрдирд┐рдВрдЧ рд░реЗрд╕рд┐рдкреАрдЬрд╝ рдЕрдкрдирд╛рддрд╛ рд╣реИред
рдЬрдирд░рд▓-рдкрд░реНрдкрдЬрд╝ рдмрдбрд╝реЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, Gemma 3 270M рдХрд╛ рдлрд╝реЛрдХрд╕ рджрдХреНрд╖рддрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкрд░ рд╣реИред рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ:
рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ; рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рдЗрдиреНрдлрд░реЗрдВрд╕ (INT4, Q8, рдФрд░ рдЕрдиреНрдп) рдХрдИ рдмрд╛рддрдЪреАрддреЛрдВ рдореЗрдВ 1% рд╕реЗ рдХрдо рдмреИрдЯрд░реА рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ 100M рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдорд░ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдФрд░ 170M рдХрд╛ рдмрдбрд╝рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдЬреЛ 256,000 рдЯреЛрдХрдиреНрд╕ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИтАФрдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдореЗрдВ рд░реЗрдпрд░ рдЯреЛрдХрдиреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ред
рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди-рдЯреНрдпреВрди рдХрд┐рдП рдЧрдП рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ рдмрд┐рдирд╛ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯреНрд╕, рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░реНрд╕ рдФрд░ рдХреНрд░рд┐рдПрдЯрд┐рд╡ рд░рд╛рдЗрдЯрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
Gemma 3 270M рдореЗрдВ рдЕрдЪреНрдЫреА рдирд┐рд░реНрджреЗрд╢-рдЕрдиреБрд╕рд░рдг рдХреНрд╖рдорддрд╛рдПрдБ рд╣реИрдВтАФIFEval рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЙрдбрд▓ рдХреА рд╕рддреНрдпрд╛рдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд: Google
32K рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдВрдбреЛ, рдХрдо рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ, рдФрд░ рдПрдВрдЯрд┐рдЯреА рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди, рдХреНрд▓рд╛рд╕рд┐рдлрд┐рдХреЗрд╢рди, рд╡ рд╣рд▓реНрдХреЗ рдЕрдиреБрдкрд╛рд▓рди-рдЬрд╛рдБрдЪ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдордЬрд╝рдмреВрдд рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде, Gemma 3 270M рдЙрди рдПрдЬ AI рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛, рдЧрддрд┐ рдФрд░ рд▓рд╛рдЧрдд-рджрдХреНрд╖рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
Gemma 3 270M рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪреЗрдВ?
рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, Gemma 3 270M рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╣реИрдВ:
1. Cloud Run
рдЖрдк Gemma 3 рдХреЛ Google Cloud Run рдкрд░ рдкреНрд░реАрдмрд┐рд▓реНрдЯ GPU-рдПрдХреНрд╕реЗрд▓рд░реЗрдЯреЗрдб рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Gemma 3 270M рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХрдВрдЯреЗрдирд░ Gemma-on-CloudRun GitHub repo рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ (1B+) рд╣реА рдкреНрд░реАрдмрд┐рд▓реНрдЯ рд╣реИрдВред рд╡реЗрдм рдпрд╛ рдмреИрдХрдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдХрд┐рдлрд╝рд╛рдпрддреА рдЗрдиреНрдлрд░реЗрдВрд╕ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╣реЗрддреБ Google Cloud Run рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
2. Android (рдЕрдиреБрд╢рдВрд╕рд┐рдд)
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рд╣реЛрддрд╛ рд╣реИ, Gemma 3 270M рдХреЗ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рд╡рд░реНрдЬрд╝рди ( gemma3-270m-it-q8 ) рдФрд░ Google рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gemma Gallery App рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдпрд╣ рддрд░реАрдХрд╛ рдЕрддреНрдпрдВрдд рддреЗрдЬрд╝ рдСрдлрд╝рд▓рд╛рдЗрди рдЗрдиреНрдлрд░реЗрдВрд╕, рдордЬрд╝рдмреВрдд рдЧреЛрдкрдиреАрдпрддрд╛, рдФрд░ рдиреНрдпреВрдирддрдо рдмреИрдЯрд░реА рдЙрдкрдпреЛрдЧ рджреЗрддрд╛ рд╣реИред
3. рд▓реЛрдХрд▓ рдЗрдиреНрдлрд░реЗрдВрд╕
рдЖрдк рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рднреА рдирд┐рдореНрди рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Gemma 3 270M рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
LM Studio : рдЕрдкрдиреЗ LM Studio рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ .gguf рдпрд╛ .litertlm рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рддреБрд░рдВрдд рдЪреИрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЪрд▓рд╛рдПрдБ рдпрд╛ рд▓реЛрдХрд▓реА рд╣реЛрд╕реНрдЯ рдХрд░реЗрдВред
Ollama : рдЖрдк ollama run gemma3:270m рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд▓реЛрдХрд▓реА рд░рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Llama.cpp : рдпрд╣ рднреА Gemma 3 270M рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдЯреНрд░рд╛-рд▓рд╛рдЗрдЯрд╡реЗрдЯ CPU рдЗрдиреНрдлрд░реЗрдВрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
Docker: рдЖрдк Docker рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА Gemma 3 рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВтАФрдпрд╛ рддреЛ Hugging Face рд╕реЗ рдпрд╛ Gemma рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ GitHub рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗред
HuggingFace: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ HuggingFace рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЗрд╕ рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд▓реЛрдХрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдЯреНрд░реЗрдВрдб рдФрд░ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди-рдЯреНрдпреВрди рджреЛрдиреЛрдВ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
4. рдореЙрдбрд▓ рдХреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░реЗрдВ
Gemma 3 270M, Hugging Face Transformers, JAX, рдпрд╛ Unsloth рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкрд░ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░ рд╕рдХреЗрдВред рдореЙрдбрд▓ рдХрд╛ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ рддреЗрдЬрд╝, рдХрдо-рд▓рд╛рдЧрдд рд╡рд╛рд▓реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ, рдФрд░ QAT рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╕реАрдзреЗ INT4 рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ Android рдРрдк рдмрдирд╛рдирд╛ рд╕рд┐рдЦрд╛рдКрдБрдЧрд╛ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Gemma 3 270M рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо Google рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gallery рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗред
рдЪрд░рдг 1: рдРрдк рдХреЛ рдХреНрд▓реЛрди рдФрд░ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЖрдЗрдП рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рдХреЗ рдФрд░ Google рдХреА рдореМрд▓рд┐рдХ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЪрд░рдг 1.1: рдирдпрд╛ Android Studio рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░, Android Studio рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ Empty Activity рдЪреБрдиреЗрдВред
рдЪрд░рдг 1.2: рдирдИ рдЦрд╛рд▓реА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдирд╛рдо рднрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, тАЬGemma 3 270MтАЭ) рдФрд░ рдмрд╛рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпрдерд╛рд╡рдд рд░рдЦреЗрдВред рдлрд┐рд░, Finish рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЪрд░рдг 1.3: рдореБрдЦреНрдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░реЗрдВ
рдЕрдм, Android Studio рдХреЗ рднреАрддрд░ (рдмрд╛рдПрдБ рдиреАрдЪреЗ) рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд bash рдХрдорд╛рдВрдбреНрд╕ рдЪрд▓рд╛рдПрдБ:
git clone https://github.com/google-ai-edge/gallery
cd gallery/androidрд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреБрд▓реЗрдЧрд╛ред рдЖрдк рдЯреИрдм рдХреЗ рдмрд╛рдПрдБ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 2: рдореЙрдбрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
Gemma 3 270M рдореЙрдбрд▓ рдХреЛ рдЕрдкрдиреА Android рдРрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдРрдк рдХреА Tasks.kt рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдП рдЯрд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
data/ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдБ рдФрд░ Tasks.kt рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рд╡рд╣рд╛рдБ, рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдХреЗ Q8 рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рд╡реЗрд░рд┐рдПрдВрдЯ gemma3-270m-it-q8 рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯрд╛рд╕реНрдХ рдПрдВрдЯреНрд░реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд▓реЛ-рдореЗрдореЛрд░реА рдФрд░ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рд╣реИред рдпрд╣ рдлрд╝реЙрд░реНрдореЗрдЯ рд╕реАрдорд┐рдд RAM рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдиреЛрдЯ: рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВ Q8 рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛, рдЬреЛ рдХрдо рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддрд╛ рд╣реИред рдЖрдк рдпрд╣ рдореЙрдбрд▓ рдпрд╣рд╛рдБ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://huggingface.co/litert-community/gemma-3-270m-it
val TASK_GEMMA_3_270M = Task(
type = TaskType.LLM_PROMPT_LAB,
icon = Icons.Outlined.Widgets,
models = mutableListOf(
Model(
name = "gemma3-270m-it-q8",
downloadFileName = "gemma3-270m-it-q8.task",
url = "https://huggingface.co/litert-community/gemma-3-270m-it/resolve/main/gemma3-270m-it-q8.task",
sizeInBytes = 318_767_104L
)
),
description = "Gemma 3 270M (Q8): On-device instruction-following LLM",
docUrl = "https://ai.google.dev/gemma",
sourceCodeUrl = "https://github.com/google-ai-edge/gallery",
textInputPlaceHolderRes = R.string.chat_textinput_placeholder
)рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕ рдирдП рдЯрд╛рд╕реНрдХ рдХреЛ рдРрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ:
/** All tasks */
val TASKS: List<Task> = listOf(
TASK_LLM_ASK_IMAGE,
TASK_LLM_CHAT,
TASK_LLM_PROMPT_LAB,
TASK_IMAGE_CLASSIFICATION,
TASK_TEXT_CLASSIFICATION,
TASK_IMAGE_GENERATION,
TASK_GEMMA_3_270M
)рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣рд╛рдБ рдХреЛрдб рдореЗрдВ рдирдП LiteRT рдЯрд╛рд╕реНрдХ рдбрд┐рдлрд┐рдирд┐рд╢рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ:
рдирдпрд╛ рдЯрд╛рд╕реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ: TASK_GEMMA_3_270M рд╡реИрд░рд┐рдПрдмрд▓ рдРрдк рдХреА Tasks.kt рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ Gemma 3 270M рдХреЛ рдПрдХ рдЪрдпрди рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗред
.task рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдВрдХ рдХрд░рдирд╛: рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб Hugging Face рдкрд░ рд╣реЛрд╕реНрдЯреЗрдб gemma3-270m-it-q8.task рдмрдВрдбрд▓ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдРрдк рдХреЗ рднреАрддрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред
рдореЙрдбрд▓ рд╡рд┐рд╡рд░рдг : .task рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рд╡реЗрдЯреНрд╕, рдЯреЛрдХрдирд╛рдЗрдЬрд╝рд░, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ LiteRT рдХреЛ рдореЙрдбрд▓ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
Q8 рд╡реЗрд░рд┐рдПрдВрдЯ : рдпрд╣ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдореЛрд░реА рдмрдЪрдд рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреНрд╡рд╛рд▓рд┐рдЯреА рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рддрд╛ рд╣реИтАФрдлреЛрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣рд▓реНрдХрд╛ рд░рд╣рддреЗ рд╣реБрдП рднреА рдирд┐рд░реНрджреЗрд╢-рдЕрдиреБрд╕рд░рдг рдХреЛ рдЕрдЪреНрдЫреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИред
рдЯрд╛рд╕реНрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ : рдпрд╣ рд╡рд┐рд╡рд░рдг, рдбрд╛рдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди URL рдФрд░ рд╕реЛрд░реНрд╕ рдХреЛрдб рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ Gallery рдРрдк рдореЗрдВ рдЯрд╛рд╕реНрдХ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдореЗрдВрдЯреЗрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред
рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА : рдЕрдВрддрддрдГ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА рдореЗрдВ TASK_GEMMA_3_270M рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПред
рдЪрд░рдг 3: рдореЙрдбрд▓ рдкреЙрдкреБрд▓реЗрд╢рди рдлрд╝рд┐рдХреНрд╕
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Gallery рдРрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд░рд┐рдореЛрдЯ рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ JSON рд╕реЗ рдкреЙрдкреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╕реНрдЯрдо Gemma 3 270M рдПрдВрдЯреНрд░реА рд╡рд╣рд╛рдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ UI рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдХреЛрдб рдореЗрдВ TASK_GEMMA_3_270M рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реЛред рдпрд╣ рдЪрд░рдг рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ 270M рдореЙрдбрд▓ рдХреЛ LLM Prompt Lab рдЯрд╛рд╕реНрдХ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдЪрдпрди рдпреЛрдЧреНрдп рд░рд╣реЗред
modelmanager/ModelManagerViewModel.kt рдЦреЛрд▓реЗрдВ, loadModelAllowlist() рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬреЗрдВ, рдФрд░ (рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯреЗрдб рдореЙрдбрд▓реЛрдВ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдХреЗ рдмрд╛рдж) рдпрд╣ рдЬреЛрдбрд╝реЗрдВ:
Log.d(TAG, "Adding TASK_GEMMA_3_270M models to LLM_PROMPT_LAB")
for (gemmaModel in TASK_GEMMA_3_270M.models) {
if (!TASK_LLM_PROMPT_LAB.models.any { it.name == gemmaModel.name }) {
Log.d(TAG, "Adding model ${gemmaModel.name} to LLM_PROMPT_LAB")
TASK_LLM_PROMPT_LAB.models.add(gemmaModel)
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг:
рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ рд░реАрд╕реЗрдЯ: рдРрдк рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕рд░реНрд╡рд░ рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ рд╕реЗ TASK_LLM_PROMPT_LAB.models рдХреЛ рдХреНрд▓рд┐рдпрд░ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рддрдХ рдЖрдк рдЕрдкрдиреЗ рд▓реЛрдХрд▓ рдореЙрдбрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ, рд╡рд╣ рдорд┐рдЯ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ-рд╕реБрд░рдХреНрд╖рд┐рдд: рдЧрд╛рд░реНрдб any { it.name == gemmaModel.name } рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм loadModelAllowlist() рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рд╣реЛрдВред
рдСрдлрд╝рд▓рд╛рдЗрди-рдлреНрд░реЗрдВрдбрд▓реА: рдпрд╣ рдХреЛрдб рддрдм рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдпрд╛ рдбрд┐рд╕реНрдХ рдлреЙрд▓рдмреИрдХ рд╕реЗ рд▓реЛрдб рд╣реЛрддреА рд╣реИтАФрджреЛрдиреЛрдВ рд╣реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдореЙрдбрд▓ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреВрд░реА рдлрд╝рдВрдХреНрд╢рди рдпрд╣рд╛рдБ рд╣реИ:
fun loadModelAllowlist() {
_uiState.update {
uiState.value.copy(
loadingModelAllowlist = true, loadingModelAllowlistError = ""
)
}
viewModelScope.launch(Dispatchers.IO) {
try {
withTimeoutOrNull(30000L) { // 30 second timeout
// Load model allowlist json.
Log.d(TAG, "Loading model allowlist from internet...")
val data = getJsonResponse<ModelAllowlist>(url = MODEL_ALLOWLIST_URL)
var modelAllowlist: ModelAllowlist? = data?.jsonObj
if (modelAllowlist == null) {
Log.d(TAG, "Failed to load model allowlist from internet. Trying to load it from disk")
modelAllowlist = readModelAllowlistFromDisk()
} else {
Log.d(TAG, "Done: loading model allowlist from internet")
saveModelAllowlistToDisk(modelAllowlistContent = data?.textContent ?: "{}")
}
if (modelAllowlist == null) {
Log.e(TAG, "Failed to load model allowlist from both internet and disk")
_uiState.update {
uiState.value.copy(
loadingModelAllowlist = false,
loadingModelAllowlistError = "Failed to load model list"
)
}
return@withTimeoutOrNull
}
Log.d(TAG, "Allowlist: $modelAllowlist")
// Convert models in the allowlist.
TASK_LLM_CHAT.models.clear()
TASK_LLM_PROMPT_LAB.models.clear()
TASK_LLM_ASK_IMAGE.models.clear()
try {
for (allowedModel in modelAllowlist.models) {
if (allowedModel.disabled == true) {
continue
}
val model = allowedModel.toModel()
if (allowedModel.taskTypes.contains(TASK_LLM_CHAT.type.id)) {
TASK_LLM_CHAT.models.add(model)
}
if (allowedModel.taskTypes.contains(TASK_LLM_PROMPT_LAB.type.id)) {
TASK_LLM_PROMPT_LAB.models.add(model)
}
if (allowedModel.taskTypes.contains(TASK_LLM_ASK_IMAGE.type.id)) {
TASK_LLM_ASK_IMAGE.models.add(model)
}
}
// Add models from TASK_GEMMA_3_270M to LLM_PROMPT_LAB
Log.d(TAG, "Adding TASK_GEMMA_3_270M models to LLM_PROMPT_LAB")
for (gemmaModel in TASK_GEMMA_3_270M.models) {
if (!TASK_LLM_PROMPT_LAB.models.any { it.name == gemmaModel.name }) {
Log.d(TAG, "Adding model ${gemmaModel.name} to LLM_PROMPT_LAB")
TASK_LLM_PROMPT_LAB.models.add(gemmaModel)
}
}
} catch (e: Exception) {
Log.e(TAG, "Error processing model allowlist", e)
}
// Pre-process all tasks.
try {
processTasks()
} catch (e: Exception) {
Log.e(TAG, "Error processing tasks", e)
}
// Update UI state.
val newUiState = createUiState()
_uiState.update {
newUiState.copy(
loadingModelAllowlist = false,
)
}
// Process pending downloads.
try {
processPendingDownloads()
} catch (e: Exception) {
Log.e(TAG, "Error processing pending downloads", e)
}
} ?: run {
// Timeout occurred
Log.e(TAG, "Model allowlist loading timed out")
_uiState.update {
uiState.value.copy(
loadingModelAllowlist = false,
loadingModelAllowlistError = "Model list loading timed out"
)
}
}
} catch (e: Exception) {
Log.e(TAG, "Error in loadModelAllowlist", e)
_uiState.update {
uiState.value.copy(
loadingModelAllowlist = false,
loadingModelAllowlistError = "Failed to load model list: ${e.message}"
)
}
}
}
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЪрд░рдг 4: рдиреЗрд╡рд┐рдЧреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдРрдк рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдЯрд╛рд╕реНрдХ рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк Gemma 3 270M рдХреЛ Prompt Lab рдЯрд╛рд╕реНрдХ (рдЪрд░рдг 3) рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд╛рдиреНрдпрддрд╛ рдЯреВрдЯ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЪрд░рдг рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдореЙрдбрд▓-рдЕрд╡реЗрдпрд░ рдмрдирд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЯреИрдкреНрд╕, рдбреАрдк рд▓рд┐рдВрдХреНрд╕, рдФрд░ рд░рд┐рд╕реНрдЯреЛрд░реНрдб рд╕реНрдЯреЗрдЯ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдБред
navigation/GalleryNavGraph.kt рдЦреЛрд▓реЗрдВ рдФрд░ рдореЙрдбрд▓ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
рдкрд╣рд▓реЗ:
onModelClicked = { model ->
navigateToTaskScreen(
navController = navController, taskType = curPickedTask.type, model = model
)
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдмрд╛рдж рдореЗрдВ:
onModelClicked = { model ->
Log.d("GalleryNavGraph", "Model clicked: ${model.name}, current task: ${curPickedTask.type}")
val actualTask = when {
TASK_LLM_CHAT.models.any { it.name == model.name } -> TASK_LLM_CHAT
TASK_LLM_PROMPT_LAB.models.any { it.name == model.name } -> TASK_LLM_PROMPT_LAB
TASK_LLM_ASK_IMAGE.models.any { it.name == model.name } -> TASK_LLM_ASK_IMAGE
TASK_TEXT_CLASSIFICATION.models.any { it.name == model.name } -> TASK_TEXT_CLASSIFICATION
TASK_IMAGE_CLASSIFICATION.models.any { it.name == model.name } -> TASK_IMAGE_CLASSIFICATION
TASK_IMAGE_GENERATION.models.any { it.name == model.name } -> TASK_IMAGE_GENERATION
else -> curPickedTask
}
Log.d("GalleryNavGraph", "Navigating to task: ${actualTask.type} for model: ${model.name}")
navigateToTaskScreen(
navController = navController, taskType = actualTask.type, model = model
)
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрджрд┐ рдХреЛрдИ рдореЙрдбрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрдпрдирд┐рдд рдЯрд╛рд╕реНрдХ рд╕реЗ рднрд┐рдиреНрди рдЯрд╛рд╕реНрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдпрд╣ рдХреЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реАрди рдореЙрдбрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПред┬а
рдбреАрдк рд▓рд┐рдВрдХреНрд╕ рдпрд╛ рд░рд┐рд╕реНрдЯреЛрд░реНрдб рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдРрдк рдХрд┐рд╕реА рдРрд╕реЗ рдореЙрдбрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЙрдЪрд┐рдд рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реА рд╕реНрдХреНрд░реАрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЯрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реЗрдлрд╝реНрдЯреА рдЪреЗрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВтАФрдпрджрд┐ рдореЙрдбрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдХрд░реЗрдВ:
// Added error handling for model not found:
if (model != null) {
Log.d("GalleryNavGraph", "Model found for LlmChat: ${model.name}")
modelManagerViewModel.selectModel(model)
LlmChatScreen(/* ... */)
} else {
Log.w("GalleryNavGraph", "Model not found for LlmChat, modelName: ${it.arguments?.getString("modelName")}")
// Handle case where model is not found
androidx.compose.runtime.LaunchedEffect(Unit) {
navController.navigateUp()
}
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣ рдХреЛрдб рдРрдк рдХреЛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдпрд╛ рдЦрд╛рд▓реА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ navController рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рднрд▓реЗ рд╣реА рдХреЛрдИ рдореЙрдбрд▓ рдЧрд╛рдпрдм рд╣реЛ, рд╕рдордЧреНрд░ рдЕрдиреБрднрд╡ рдмрд╛рдзрд┐рдд рд╣реБрдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╡рд╛рд╣ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред
рдЪрд░рдг 5: рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛┬а
рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрдбрд╝рд╛ рднрд╛рд╖рд╛ рдореЙрдбрд▓ рдЪрд▓рд╛рдирд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ рднрд┐рдиреНрди рд╣реИред рд╕реНрдЯреЛрд░реЗрдЬ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдмрдЬрдЯ рдЕрдзрд┐рдХ рдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реЗрд▓реНрдпрд░реНрд╕ рдХреЛ рдРрдк рдХреНрд░реИрд╢ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред Android рдкрд░ Gemma 3 270M (Q8, ~304MB) рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдлрд╝реНрдЯреА рдЪреЗрдХреНрд╕ рдФрд░ рдлрд╝реЗрд▓рдУрд╡рд░ рд╕реНрдЯреНрд░реИрдЯреЗрдЬреАрдЬрд╝ рдЬреЛрдбрд╝реАрдВред
рдЪрд░рдг 5.1: рд╕рд╣рд┐рд╖реНрдгреБ рд╕рд╛рдЗрдЬрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди
рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдРрдк .task рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕реЗрдиреАрдЯреА рдЪреЗрдХреНрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рдлрд╝реА рдХрд░реАрдм рд╣реИ (┬▒10% рдХреЗ рднреАрддрд░)ред рдпрд╣ рдЯреЙрд▓рд░реЗрдВрд╕ рдХрдВрдкреНрд░реЗрд╢рди рдпрд╛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд░рдкреНрдЯ рдпрд╛ рдЖрдВрд╢рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред
// File validation and logging
Log.d(TAG, "Checking model file: $modelPath")
Log.d(TAG, "Model file exists: ${modelFile.exists()}")
Log.d(TAG, "Model file can read: ${modelFile.canRead()}")
Log.d(TAG, "Model file size: ${modelFile.length()} bytes")
Log.d(TAG, "Model file absolute path: ${modelFile.absolutePath}")
// Size validation with tolerance (10%)
val expectedSize = model.sizeInBytes
val fileSize = modelFile.length()
val sizeDifference = kotlin.math.abs(fileSize - expectedSize)
val sizeTolerance = (expectedSize * 0.1).toLong()
if (!modelFile.exists() || !modelFile.canRead() || sizeDifference > sizeTolerance) {
onDone("Model file invalid (missing/unreadable/wrong size).")
return
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрде, рд░реАрдбреЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рд╕рд╛рдЗрдЬ рдЬреИрд╕реА рдореВрд▓ рдмрд╛рддреЗрдВ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЬрд╛рдБрдЪ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди onDone() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд▓реНрджреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдХреЗ рдХреНрд░реИрд╢ рдХрд╛ рдЬреЛрдЦрд┐рдо рди рд░рд╣реЗред
рдЪрд░рдг 5.2: рдореЗрдореЛрд░реА-рдЕрд╡реЗрдпрд░ рдмреИрдХрдПрдВрдб рдЪрдпрди┬а
рдпрджрд┐ рдЖрдк рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд▓рдВрдмреЗ рдЖрдЙрдЯрдкреБрдЯ, GPU рдПрд▓реЛрдХреЗрд╢рди рд╕реНрдкрд╛рдЗрдХреНрд╕), рддреЛ рдмрдбрд╝реЗ рдореЙрдбрд▓ Out-Of-Memory (OOM) рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдмреИрдХрдПрдВрдб (CPU рдмрдирд╛рдо GPU/NPU) рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЬрд┐рдХ рдЬреЛрдбрд╝рд╛, рд╕рд╛рде рд╣реА рдУрд╡рд░рд╕рд╛рдЗрдЬрд╝реНрдб рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдореИрдХреНрд╕ рдЯреЛрдХрдиреНрд╕ рдХреЛ рдЯреНрд░рд┐рдо рдХрд┐рдпрд╛ред
val preferredBackend = when {
fileSize > 200_000_000L -> {
Log.d(TAG, "Model is large (${fileSize / 1024 / 1024}MB), using CPU backend for safety")
LlmInference.Backend.CPU
}
accelerator == Accelerator.CPU.label -> LlmInference.Backend.CPU
accelerator == Accelerator.GPU.label -> LlmInference.Backend.GPU
else -> LlmInference.Backend.CPU
}
val baseMaxTokens = 1024 // your default; tune to taste
val maxTokens = if (fileSize > 200_000_000L) {
kotlin.math.min(baseMaxTokens, 512)
} else {
baseMaxTokens
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдореЙрдбрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ CPU рдкрд░ рдЬрд╛рдПрдБ (рдЬрд╝реНрдпрд╛рджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд, рдкрд░ рдзреАрдореЗ)ред рдХреЛрдб .task рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдЗрдЯ рдЖрдХрд╛рд░ (fileSize) рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдПрдХ рдереНрд░реЗрд╢рд╣реЛрд▓реНрдб (maxTokens) рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ 200 MB рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЛ CPU рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреЛрдХрди рдмрдЬрдЯ рдЖрдзрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ GPU рдПрд▓реЛрдХреЗрд╢рди рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореЗрдореЛрд░реА рд╕реНрдкрд╛рдЗрдХреНрд╕ рдФрд░ рдУрд╡рд░рд╕рд╛рдЗрдЬрд╝реНрдб рдЬреЗрдирд░реЗрд╢рди рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЪрд░рдг 5.3: рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ
LiteRT рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рд░рдирдЯрд╛рдЗрдо рдХреНрд░рд┐рдПрд╢рди рдФрд░ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рд░рдирдЯрд╛рдЗрдо рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдореЛрд░реА рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд░рдорд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ try/catch рдмреНрд▓реЙрдХреНрд╕ рдореЗрдВ рд░реИрдк рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХреНрд▓реАрдирдЕрдк рдЬреЛрдбрд╝рд╛ред
val llmInference = try {
LlmInference.createFromOptions(context, options)
} catch (e: Exception) {
Log.e(TAG, "Failed to create LlmInference instance", e)
onDone("Failed to create model instance: ${e.message}")
return
}
val session = try {
LlmInferenceSession.createFromOptions(/* ... */)
} catch (e: Exception) {
Log.e(TAG, "Failed to create LlmInferenceSession", e)
try {
llmInference.close()
} catch (closeException: Exception) {
Log.e(TAG, "Failed to close LlmInference after session creation failure", closeException)
}
onDone("Failed to create model session: ${e.message}")
return
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдпрд╣ try/catch рд╕реНрд╡рдЪреНрдЫ рд░реЛрд▓рдмреИрдХ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИтАФрдпрджрд┐ рд░рдирдЯрд╛рдЗрдо рдХреНрд░рд┐рдПрд╢рди рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреБрдЫ рдирд╣реАрдВ рдмрдврд╝рддрд╛; рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░рдирдЯрд╛рдЗрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реАрдк-рдПрд▓реЛрдХреЗрдЯреЗрдб llmInference рдСрдмреНрдЬреЗрдХреНрдЯ .close() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓реНрд╕ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдБред рдЕрдиреНрдпрдерд╛, рдЖрдк JNI рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдХреЗ рдЬреЛрдЦрд┐рдо рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЧрд▓реЗ рдореЙрдбрд▓ рд▓реЛрдб рдкрд░ рдХреНрд░реИрд╢ рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 5.4: рдЗрдиреНрдлрд░реЗрдВрд╕-рдЯрд╛рдЗрдо рдЧрд╛рд░реНрдбреНрд╕
рднрд▓реЗ рд╣реА рдХреЛрдИ рдореЙрдбрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рд╣реЛ рдЬрд╛рдП, рдЗрдиреНрдлрд░реЗрдВрд╕ рд░реЗрд╕ рдХрдВрдбреАрд╢рдиреНрд╕, рдирд▓ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝, рдпрд╛ рдЕрдирдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рдЗрдВрд╕реНрдЯреИрдВрд╕реЗрдЬрд╝ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдЦрд╝реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреВрд░реЗ рдЗрдиреНрдлрд░реЗрдВрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдирд▓ рдЪреЗрдХреНрд╕ рдФрд░ рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреИрдЪ рдЬреЛрдбрд╝реЗред
try {
Log.d(TAG, "Starting inference for model '${model.name}' with input: '${input.take(50)}...'")
val instance = model.instance as LlmModelInstance? ?: run {
Log.e(TAG, "Model instance is null for '${model.name}'")
resultListener("Error: Model not initialized", true)
return
}
} catch (e: Exception) {
Log.e(TAG, "Error during inference for model '${model.name}'", e)
resultListener("Error during inference: ${e.message}", true)
}рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗрд╡рд▓ рд╡реИрдз рдореЙрдбрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рд╣реА рдЖрдЧреЗ рдмрдврд╝реЗ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдлрд╝-рд╕реБрдерд░реЗ рдврдВрдЧ рд╕реЗ рдХреИрдЪ рдХрд░реЗред as LlmModelInstance? рдХрд╛рд╕реНрдЯ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдПрд▓реНрд╡рд┐рд╕-рдЬреИрд╕рд╛ рдлреЙрд▓рдмреИрдХ рдпрджрд┐ рдирд▓ рд╣реЛ рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рддреБрд░рдВрдд рд░реЛрдХ рджреЗрддрд╛ рд╣реИред try/catch рдореЗрдВ рдмреНрд▓реЙрдХ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдХреЛрдИ рднреА рдПрдХреНрд╕реЗрдкреНрд╢рди рдкрдХрдбрд╝ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдПрд░рд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд░рдг 6: рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рд░рди рдХрд░реЗрдВ
рдЬрдм рдЖрдк рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░ рд▓реЗрдВ, рддреЛ рд╣рдо рдРрдк рдЪрд▓рд╛рдПрдБрдЧреЗред рдЕрдкрдиреЗ рд▓реЛрдХрд▓ Android рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдРрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде Android Studio рдореЗрдВ рд╡рд╛рдпрд░рд▓реЗрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреЗрдпрд░ рдХрд░реЗрдВред
рдЪрд░рдг 6.1: Android рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЕрдкрдиреЗ Android рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ Settings рдРрдк рдореЗрдВ рдЬрд╛рдПрдБ рдФрд░ Developer options рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рдлрд┐рд░ Wireless debugging рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдЖрдкрдХреЛ рджреЛ рдкреЗрдпрд░рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╡рд╛рд▓реА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред
рдЪрд░рдг 6.2: Android Studio рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ
Android Studio рдореЗрдВ Device Manager рдЦреЛрд▓реЗрдВ (рдЖрдЗрдХрди рдкрд░ Android рд▓реЛрдЧреЛ рд╡рд╛рд▓рд╛ рдлрд╝реЛрди рджрд┐рдЦрддрд╛ рд╣реИ) рдФрд░ Pair using QR code рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ QR рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВ рдФрд░ рдкреЗрдпрд░рд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░, Device Manager рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдирд╛рдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдФрд░ Android рдбрд┐рд╡рд╛рдЗрд╕ рджреЛрдиреЛрдВ рдПрдХ рд╣реА WiFi рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдВред
рдЪрд░рдг 6.3: рдРрдк рдЪрд▓рд╛рдПрдБ
Android рдбрд┐рд╡рд╛рдЗрд╕ рдорд┐рд░рд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Device Mirroring рдЖрдЗрдХрди (рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реНрдХреНрд░реАрди рдФрд░ рдлрд╝реЛрди рд╕реНрдХреНрд░реАрди рджрд┐рдЦрддреА рд╣реИ) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдорд┐рд░рд░ рд╣реЛ рдЬрд╛рдП, рд╣рд░реЗ Run рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдРрдк рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рд╣реЛ рдЬрд╛рдПред
рдЪрд░рдг 6.4: рдореЙрдбрд▓реЛрдВ рдХреЛ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдРрдк рд▓реЙрдиреНрдЪ рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП write рдЯреЛрдХрди рдХреЗ рд╕рд╛рде Hugging Face рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧреАред
HuggingFace рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрдпрдирд┐рдд рдореЙрдбрд▓ рдкрд░ start download рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХрд╛ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ gemma3-270m-it-q8 рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЕрдм рдЖрдк рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 7: рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдП:
рдкреНрд░рдпреЛрдЧ 1: рдлреНрд░реА-рдлрд╝реЙрд░реНрдо рд▓реЗрдЦрди
рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдлреНрд░реА-рдлрд╝реЙрд░реНрдо рдХрд╣рд╛рдиреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд┐рдпрд╛, рдФрд░ рдпреЗ рдкрд░рд┐рдгрд╛рдо рд░рд╣реЗ:
рдореЙрдбрд▓ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдп-рд╡рд╕реНрддреБ рдкрд░ рдЕрд╕рд░рджрд╛рд░ рдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЦреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд╛рдорд╛рдиреНрдп-рд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд▓рдВрдмреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдореЙрдбрд▓ рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рдЫреЛрдЯреЗ рдкреЛрд╕реНрдЯреНрд╕, рд╡рд┐рд╡рд░рдгреЛрдВ рдФрд░ рдЖрдЙрдЯрд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдмрдирддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд░реНрд╕реНрдЯ-рдЯреЛрдХрди рдЬреЗрдирд░реЗрд╢рди рдХрд╝рд░реАрдм 0.53 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдлрд╝реА рддреЗрдЬрд╝ рд╣реИ, рдФрд░ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдб рд╕реНрдкреАрдб рднреА рдЕрдЪреНрдЫреА рд╣реИред
рдкреНрд░рдпреЛрдЧ 2: рдЯреЛрди рд░реА-рд░рд╛рдЗрдЯ
рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ Gemma 3 270M рд╕реЗ рдЙрд╕реЗ рдлреНрд░реЗрдВрдбрд▓реА рдЯреЛрди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЛ рдХрд╣рд╛ред
рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди-рдлрд╝реЙрд▓реЛрдЗрдВрдЧ рдордЬрд╝рдмреВрдд рд╣реИтАФрдФрдкрдЪрд╛рд░рд┐рдХ, рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдФрд░ рдлреНрд░реЗрдВрдбрд▓реА рдЯреЛрди рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реБрдП рднреА рдЕрд░реНрде рдмрд░рдХрд╝рд░рд╛рд░ рд░рд╣рддрд╛ рд╣реИред рдЫреЛрдЯреЗ рдкреИрд╕реЗрдЬ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рд▓рдЧрднрдЧ рддреНрд╡рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдИрдореЗрд▓ рдкреЙрд▓рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдкреНрд░рдпреЛрдЧ 3: рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╕рд╛рд░
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдВ рд╕рдорд░реА рднреА рдХрд┐рдпрд╛ред рдЖрдк рд╕рдорд░реА, рдкреЙрдЗрдВрдЯреНрд╕, рдЯреЗрдХрдЕрд╡реЗ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдореЙрдбрд▓ рд╕рдорд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдЫреЛрдЯреЗ рдФрд░ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдЧреНрдЬрд╝реАрдХреНрдпреВрдЯрд┐рд╡ рд╕рдорд░реА, рдмреБрд▓реЗрдЯ рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ рдпрд╛ TL;DR рд╢рд╛рдорд┐рд▓ рд╣реИрдВред┬а
рдкреНрд░рдпреЛрдЧ 4: рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд░рд╛рдЗрдЯрд░
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЛ рдХрд╣рд╛ред рдпрд╣ рдкрд╛рдпрд╛:
рдореЙрдбрд▓ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдФрд░ рдЫреЛрдЯреЗ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬрд╝ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЗрдореНрдкреЛрд░реНрдЯреНрд╕, рдПрдЬ рдХреЗрд╕, рдпрд╛ рдЬрдЯрд┐рд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЧрд╛рдЗрдбреЗрдВрд╕ рдХреЗ рдмрд┐рдирд╛ рдорд┐рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рддреЗрдЬрд╝реА рд╕реЗ рдмрдирддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд▓рдВрдмреА рдХрдореНрдкреНрд▓реАрд╢рдиреНрд╕ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдмрдврд╝рдиреЗ рдкрд░ рдереЛрдбрд╝реА рдзреАрдореА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред┬а
рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдпрд╣ GitHub рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗрдЯ рдЕрдк рдХрд░ рджреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдордиреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг рджреЗрдЦрд╛ рдХрд┐ Gemma 3 270M рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдБтАФрдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдХрд╕реНрдЯрдо Android рдРрдк рдореЗрдВ рд╡рд╛рдпрд░ рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдФрд░ рдЗрдиреНрдлрд░реЗрдВрд╕-рдЯрд╛рдЗрдо рд╕реЗрдлрд╝реНрдЯреА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рддрдХред
Gemma 3 рддреЗрдЬрд╝ рдЗрдиреНрдлрд░реЗрдВрд╕, рдХрдо рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб, рдмрд╣реБрдд рдХрдо рдкрд╛рд╡рд░ рдЙрдкрдпреЛрдЧ, INT4 рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдкреЛрд░реНрдЯ (рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдкрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде), рдФрд░ рдкреВрд░реНрдг рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рд░рдирд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред
Google рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Gemma 3 270M рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИтАФ270 рдорд┐рд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрд▓реНрдЯреНрд░рд╛-рдХреЙрдореНрдкреИрдХреНрдЯ рдореЙрдбрд▓, рдЬреЛ рдХреБрд╢рд▓ AI рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдПрдХ рдирдП рдкреИрд░рд╛рдмрд┐рдЧреНрдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢рд╛рд▓ рдЬрдирд░рд▓-рдкрд░реНрдкрдЬрд╝ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, Gemma 3 270M рдХреЛ рдЯрд╛рд╕реНрдХ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ Gemma 3 270M рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рджрд┐рдЦрд╛рдКрдБрдЧрд╛ рдФрд░ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдпрд╣ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдмреЗрд╣рддрд░реАрди рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╣рдо рдЕрдкрдиреЗ рдкрд╛рдардХреЛрдВ рдХреЛ рдирд╡реАрдирддрдо AI рдЕрдкрдбреЗрдЯреНрд╕ рд╕реЗ рдЕрд╡рдЧрдд рд░рдЦрддреЗ рд╣реИрдВ The Median рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗтАФрд╣рдорд╛рд░рд╛ рдореБрдлрд╝реНрдд рд╢реБрдХреНрд░рд╡рд╛рд░ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░, рдЬреЛ рд╣рдлрд╝реНрддреЗ рдХреА рдкреНрд░рдореБрдЦ рдЦрдмрд░реЛрдВ рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИред рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВ рдФрд░ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд░рд╣реЗрдВ:
Gemma 3 270M рдХреНрдпрд╛ рд╣реИ?
Gemma 3 270M рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди рдореЙрдбрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ 270 рдорд┐рд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдордЬрд╝рдмреВрдд рдирд┐рд░реНрджреЗрд╢-рдЕрдиреБрд╕рд░рдг рдФрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдЯреЗрдХреНрд╕реНрдЯ рдЬреЗрдирд░реЗрд╢рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ Gemma 3 рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рджрд╕реНрдп рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдмрдбрд╝реЗ рд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ рдЬреИрд╕реЗ Gemma 3 1B рдФрд░ 4B рдХреА рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЯреНрд░реЗрдирд┐рдВрдЧ рд░реЗрд╕рд┐рдкреАрдЬрд╝ рдЕрдкрдирд╛рддрд╛ рд╣реИред
рдЬрдирд░рд▓-рдкрд░реНрдкрдЬрд╝ рдмрдбрд╝реЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, Gemma 3 270M рдХрд╛ рдлрд╝реЛрдХрд╕ рджрдХреНрд╖рддрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкрд░ рд╣реИред рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ:
Gemma 3 270M рдореЗрдВ рдЕрдЪреНрдЫреА рдирд┐рд░реНрджреЗрд╢-рдЕрдиреБрд╕рд░рдг рдХреНрд╖рдорддрд╛рдПрдБ рд╣реИрдВтАФIFEval рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЙрдбрд▓ рдХреА рд╕рддреНрдпрд╛рдкрдиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд: Google
32K рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдВрдбреЛ, рдХрдо рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ, рдФрд░ рдПрдВрдЯрд┐рдЯреА рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди, рдХреНрд▓рд╛рд╕рд┐рдлрд┐рдХреЗрд╢рди, рд╡ рд╣рд▓реНрдХреЗ рдЕрдиреБрдкрд╛рд▓рди-рдЬрд╛рдБрдЪ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдордЬрд╝рдмреВрдд рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде, Gemma 3 270M рдЙрди рдПрдЬ AI рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдЧреЛрдкрдиреАрдпрддрд╛, рдЧрддрд┐ рдФрд░ рд▓рд╛рдЧрдд-рджрдХреНрд╖рддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
Gemma 3 270M рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪреЗрдВ?
рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, Gemma 3 270M рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЖрд╕рд╛рди рддрд░реАрдХреЗ рд╣реИрдВ:
1. Cloud Run
рдЖрдк Gemma 3 рдХреЛ Google Cloud Run рдкрд░ рдкреНрд░реАрдмрд┐рд▓реНрдЯ GPU-рдПрдХреНрд╕реЗрд▓рд░реЗрдЯреЗрдб рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдкреНрд▓реЙрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Gemma 3 270M рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХрдВрдЯреЗрдирд░ Gemma-on-CloudRun GitHub repo рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рд╡реЗрд░рд┐рдПрдВрдЯреНрд╕ (1B+) рд╣реА рдкреНрд░реАрдмрд┐рд▓реНрдЯ рд╣реИрдВред рд╡реЗрдм рдпрд╛ рдмреИрдХрдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдХрд┐рдлрд╝рд╛рдпрддреА рдЗрдиреНрдлрд░реЗрдВрд╕ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╣реЗрддреБ Google Cloud Run рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
2. Android (рдЕрдиреБрд╢рдВрд╕рд┐рдд)
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рд╣реЛрддрд╛ рд╣реИ, Gemma 3 270M рдХреЗ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рд╡рд░реНрдЬрд╝рди (gemma3-270m-it-q8) рдФрд░ Google рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gemma Gallery App рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдпрд╣ рддрд░реАрдХрд╛ рдЕрддреНрдпрдВрдд рддреЗрдЬрд╝ рдСрдлрд╝рд▓рд╛рдЗрди рдЗрдиреНрдлрд░реЗрдВрд╕, рдордЬрд╝рдмреВрдд рдЧреЛрдкрдиреАрдпрддрд╛, рдФрд░ рдиреНрдпреВрдирддрдо рдмреИрдЯрд░реА рдЙрдкрдпреЛрдЧ рджреЗрддрд╛ рд╣реИред
3. рд▓реЛрдХрд▓ рдЗрдиреНрдлрд░реЗрдВрд╕
рдЖрдк рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рднреА рдирд┐рдореНрди рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Gemma 3 270M рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
.ggufрдпрд╛.litertlmрдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рддреБрд░рдВрдд рдЪреИрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЪрд▓рд╛рдПрдБ рдпрд╛ рд▓реЛрдХрд▓реА рд╣реЛрд╕реНрдЯ рдХрд░реЗрдВредollama run gemma3:270mрдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд▓реЛрдХрд▓реА рд░рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред4. рдореЙрдбрд▓ рдХреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░реЗрдВ
Gemma 3 270M, Hugging Face Transformers, JAX, рдпрд╛ Unsloth рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкрд░ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХрд░ рд╕рдХреЗрдВред рдореЙрдбрд▓ рдХрд╛ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ рддреЗрдЬрд╝, рдХрдо-рд▓рд╛рдЧрдд рд╡рд╛рд▓реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ, рдФрд░ QAT рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╕реАрдзреЗ INT4 рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ Android рдРрдк рдмрдирд╛рдирд╛ рд╕рд┐рдЦрд╛рдКрдБрдЧрд╛ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Gemma 3 270M рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо Google рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gallery рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗред
рдЪрд░рдг 1: рдРрдк рдХреЛ рдХреНрд▓реЛрди рдФрд░ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЖрдЗрдП рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рдХреЗ рдФрд░ Google рдХреА рдореМрд▓рд┐рдХ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЪрд░рдг 1.1: рдирдпрд╛ Android Studio рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ
рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░, Android Studio рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ Empty Activity рдЪреБрдиреЗрдВред
рдЪрд░рдг 1.2: рдирдИ рдЦрд╛рд▓реА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдирд╛рдо рднрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, тАЬGemma 3 270MтАЭ) рдФрд░ рдмрд╛рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдпрдерд╛рд╡рдд рд░рдЦреЗрдВред рдлрд┐рд░, Finish рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЪрд░рдг 1.3: рдореБрдЦреНрдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрди рдХрд░реЗрдВ
рдЕрдм, Android Studio рдХреЗ рднреАрддрд░ (рдмрд╛рдПрдБ рдиреАрдЪреЗ) рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд bash рдХрдорд╛рдВрдбреНрд╕ рдЪрд▓рд╛рдПрдБ:
рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреБрд▓реЗрдЧрд╛ред рдЖрдк рдЯреИрдм рдХреЗ рдмрд╛рдПрдБ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 2: рдореЙрдбрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
Gemma 3 270M рдореЙрдбрд▓ рдХреЛ рдЕрдкрдиреА Android рдРрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдРрдк рдХреА
Tasks.ktрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдП рдЯрд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛редdata/рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдБ рдФрд░Tasks.ktрдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред рд╡рд╣рд╛рдБ, рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдХреЗ Q8 рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рд╡реЗрд░рд┐рдПрдВрдЯgemma3-270m-it-q8рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯрд╛рд╕реНрдХ рдПрдВрдЯреНрд░реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд▓реЛ-рдореЗрдореЛрд░реА рдФрд░ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рд╣реИред рдпрд╣ рдлрд╝реЙрд░реНрдореЗрдЯ рд╕реАрдорд┐рдд RAM рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИредрдиреЛрдЯ: рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВ Q8 рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛, рдЬреЛ рдХрдо рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд░рдЦрддрд╛ рд╣реИред рдЖрдк рдпрд╣ рдореЙрдбрд▓ рдпрд╣рд╛рдБ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://huggingface.co/litert-community/gemma-3-270m-it
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореБрдЦреНрдп рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕ рдирдП рдЯрд╛рд╕реНрдХ рдХреЛ рдРрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ:
рдпрд╣рд╛рдБ рдХреЛрдб рдореЗрдВ рдирдП LiteRT рдЯрд╛рд╕реНрдХ рдбрд┐рдлрд┐рдирд┐рд╢рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ:
TASK_GEMMA_3_270Mрд╡реИрд░рд┐рдПрдмрд▓ рдРрдк рдХреАTasks.ktрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ Gemma 3 270M рдХреЛ рдПрдХ рдЪрдпрди рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдЯрд╛рд╕реНрдХ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗред.taskрдлрд╝рд╛рдЗрд▓ рд▓рд┐рдВрдХ рдХрд░рдирд╛: рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб Hugging Face рдкрд░ рд╣реЛрд╕реНрдЯреЗрдбgemma3-270m-it-q8.taskрдмрдВрдбрд▓ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдРрдк рдХреЗ рднреАрддрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред.taskрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реНрдб рдореЙрдбрд▓ рд╡реЗрдЯреНрд╕, рдЯреЛрдХрдирд╛рдЗрдЬрд╝рд░, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ LiteRT рдХреЛ рдореЙрдбрд▓ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВредTASK_GEMMA_3_270MрдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПредрдЪрд░рдг 3: рдореЙрдбрд▓ рдкреЙрдкреБрд▓реЗрд╢рди рдлрд╝рд┐рдХреНрд╕
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Gallery рдРрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд░рд┐рдореЛрдЯ рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ JSON рд╕реЗ рдкреЙрдкреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╕реНрдЯрдо Gemma 3 270M рдПрдВрдЯреНрд░реА рд╡рд╣рд╛рдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ UI рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдкрдиреЗ рдХреЛрдб рдореЗрдВ
TASK_GEMMA_3_270MрдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реЛред рдпрд╣ рдЪрд░рдг рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ 270M рдореЙрдбрд▓ рдХреЛ LLM Prompt Lab рдЯрд╛рд╕реНрдХ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╣рд░ рдмрд╛рд░ рдЪрдпрди рдпреЛрдЧреНрдп рд░рд╣реЗредmodelmanager/ModelManagerViewModel.ktрдЦреЛрд▓реЗрдВ,loadModelAllowlist()рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬреЗрдВ, рдФрд░ (рдЕрд▓рд╛рдЙрд▓рд┐рд╕реНрдЯреЗрдб рдореЙрдбрд▓реЛрдВ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдХреЗ рдмрд╛рдж) рдпрд╣ рдЬреЛрдбрд╝реЗрдВ:рдпрд╣ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг:
TASK_LLM_PROMPT_LAB.modelsрдХреЛ рдХреНрд▓рд┐рдпрд░ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рддрдХ рдЖрдк рдЕрдкрдиреЗ рд▓реЛрдХрд▓ рдореЙрдбрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ, рд╡рд╣ рдорд┐рдЯ рдЬрд╛рдПрдЧрд╛редany { it.name == gemmaModel.name }рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдмloadModelAllowlist()рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рд╣реЛрдВредрдкреВрд░реА рдлрд╝рдВрдХреНрд╢рди рдпрд╣рд╛рдБ рд╣реИ:
рдЪрд░рдг 4: рдиреЗрд╡рд┐рдЧреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдРрдк рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдЯрд╛рд╕реНрдХ рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк Gemma 3 270M рдХреЛ Prompt Lab рдЯрд╛рд╕реНрдХ (рдЪрд░рдг 3) рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдорд╛рдиреНрдпрддрд╛ рдЯреВрдЯ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЪрд░рдг рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдореЙрдбрд▓-рдЕрд╡реЗрдпрд░ рдмрдирд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЯреИрдкреНрд╕, рдбреАрдк рд▓рд┐рдВрдХреНрд╕, рдФрд░ рд░рд┐рд╕реНрдЯреЛрд░реНрдб рд╕реНрдЯреЗрдЯ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдБред
navigation/GalleryNavGraph.kt рдЦреЛрд▓реЗрдВ рдФрд░ рдореЙрдбрд▓ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:рдкрд╣рд▓реЗ:
рдмрд╛рдж рдореЗрдВ:
рдпрджрд┐ рдХреЛрдИ рдореЙрдбрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрдпрдирд┐рдд рдЯрд╛рд╕реНрдХ рд╕реЗ рднрд┐рдиреНрди рдЯрд╛рд╕реНрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдпрд╣ рдХреЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реАрди рдореЙрдбрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПред┬а
рдбреАрдк рд▓рд┐рдВрдХреНрд╕ рдпрд╛ рд░рд┐рд╕реНрдЯреЛрд░реНрдб рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдРрдк рдХрд┐рд╕реА рдРрд╕реЗ рдореЙрдбрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЙрдЪрд┐рдд рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реА рд╕реНрдХреНрд░реАрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЯрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реЗрдлрд╝реНрдЯреА рдЪреЗрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВтАФрдпрджрд┐ рдореЙрдбрд▓ рдЧрд╛рдпрдм рд╣реИ, рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдХрд░реЗрдВ:
рдпрд╣ рдХреЛрдб рдРрдк рдХреЛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛрдиреЗ рдпрд╛ рдЦрд╛рд▓реА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣
navControllerрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рднрд▓реЗ рд╣реА рдХреЛрдИ рдореЙрдбрд▓ рдЧрд╛рдпрдм рд╣реЛ, рд╕рдордЧреНрд░ рдЕрдиреБрднрд╡ рдмрд╛рдзрд┐рдд рд╣реБрдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╡рд╛рд╣ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИредрдЪрд░рдг 5: рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛┬а
рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмрдбрд╝рд╛ рднрд╛рд╖рд╛ рдореЙрдбрд▓ рдЪрд▓рд╛рдирд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ рднрд┐рдиреНрди рд╣реИред рд╕реНрдЯреЛрд░реЗрдЬ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдмрдЬрдЯ рдЕрдзрд┐рдХ рдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрд╝реЗрд▓реНрдпрд░реНрд╕ рдХреЛ рдРрдк рдХреНрд░реИрд╢ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред Android рдкрд░ Gemma 3 270M (Q8, ~304MB) рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдлрд╝реНрдЯреА рдЪреЗрдХреНрд╕ рдФрд░ рдлрд╝реЗрд▓рдУрд╡рд░ рд╕реНрдЯреНрд░реИрдЯреЗрдЬреАрдЬрд╝ рдЬреЛрдбрд╝реАрдВред
рдЪрд░рдг 5.1: рд╕рд╣рд┐рд╖реНрдгреБ рд╕рд╛рдЗрдЬрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди
рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдРрдк
.taskрдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕реЗрдиреАрдЯреА рдЪреЗрдХреНрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рдлрд╝реА рдХрд░реАрдм рд╣реИ (┬▒10% рдХреЗ рднреАрддрд░)ред рдпрд╣ рдЯреЙрд▓рд░реЗрдВрд╕ рдХрдВрдкреНрд░реЗрд╢рди рдпрд╛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд░рдкреНрдЯ рдпрд╛ рдЖрдВрд╢рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИредрдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрде, рд░реАрдбреЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рд╕рд╛рдЗрдЬ рдЬреИрд╕реА рдореВрд▓ рдмрд╛рддреЗрдВ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЬрд╛рдБрдЪ рд╡рд┐рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди
onDone()рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд▓реНрджреА рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдХреЗ рдХреНрд░реИрд╢ рдХрд╛ рдЬреЛрдЦрд┐рдо рди рд░рд╣реЗредрдЪрд░рдг 5.2: рдореЗрдореЛрд░реА-рдЕрд╡реЗрдпрд░ рдмреИрдХрдПрдВрдб рдЪрдпрди┬а
рдпрджрд┐ рдЖрдк рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд▓рдВрдмреЗ рдЖрдЙрдЯрдкреБрдЯ, GPU рдПрд▓реЛрдХреЗрд╢рди рд╕реНрдкрд╛рдЗрдХреНрд╕), рддреЛ рдмрдбрд╝реЗ рдореЙрдбрд▓ Out-Of-Memory (OOM) рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдмреИрдХрдПрдВрдб (CPU рдмрдирд╛рдо GPU/NPU) рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЬрд┐рдХ рдЬреЛрдбрд╝рд╛, рд╕рд╛рде рд╣реА рдУрд╡рд░рд╕рд╛рдЗрдЬрд╝реНрдб рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдореИрдХреНрд╕ рдЯреЛрдХрдиреНрд╕ рдХреЛ рдЯреНрд░рд┐рдо рдХрд┐рдпрд╛ред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдореЙрдбрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ CPU рдкрд░ рдЬрд╛рдПрдБ (рдЬрд╝реНрдпрд╛рджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд, рдкрд░ рдзреАрдореЗ)ред рдХреЛрдб
.taskрдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдЗрдЯ рдЖрдХрд╛рд░ (fileSize) рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдПрдХ рдереНрд░реЗрд╢рд╣реЛрд▓реНрдб (maxTokens) рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ 200 MB рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЛ CPU рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреЛрдХрди рдмрдЬрдЯ рдЖрдзрд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ GPU рдПрд▓реЛрдХреЗрд╢рди рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдореЗрдореЛрд░реА рд╕реНрдкрд╛рдЗрдХреНрд╕ рдФрд░ рдУрд╡рд░рд╕рд╛рдЗрдЬрд╝реНрдб рдЬреЗрдирд░реЗрд╢рди рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредрдЪрд░рдг 5.3: рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ
LiteRT рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рд░рдирдЯрд╛рдЗрдо рдХреНрд░рд┐рдПрд╢рди рдФрд░ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рд░рдирдЯрд╛рдЗрдо рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдореЛрд░реА рд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреНрд░рдорд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ try/catch рдмреНрд▓реЙрдХреНрд╕ рдореЗрдВ рд░реИрдк рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХреНрд▓реАрдирдЕрдк рдЬреЛрдбрд╝рд╛ред
рдпрд╣ try/catch рд╕реНрд╡рдЪреНрдЫ рд░реЛрд▓рдмреИрдХ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИтАФрдпрджрд┐ рд░рдирдЯрд╛рдЗрдо рдХреНрд░рд┐рдПрд╢рди рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреБрдЫ рдирд╣реАрдВ рдмрдврд╝рддрд╛; рд▓реЗрдХрд┐рди рдпрджрд┐ рд╕реЗрд╢рди рдХреНрд░рд┐рдПрд╢рди рдЕрд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░рдирдЯрд╛рдЗрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реАрдк-рдПрд▓реЛрдХреЗрдЯреЗрдб
llmInferenceрдСрдмреНрдЬреЗрдХреНрдЯ.close()рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓реНрд╕ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдБред рдЕрдиреНрдпрдерд╛, рдЖрдк JNI рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝ рдХреЗ рдЬреЛрдЦрд┐рдо рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЧрд▓реЗ рдореЙрдбрд▓ рд▓реЛрдб рдкрд░ рдХреНрд░реИрд╢ рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЪрд░рдг 5.4: рдЗрдиреНрдлрд░реЗрдВрд╕-рдЯрд╛рдЗрдо рдЧрд╛рд░реНрдбреНрд╕
рднрд▓реЗ рд╣реА рдХреЛрдИ рдореЙрдбрд▓ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рд╣реЛ рдЬрд╛рдП, рдЗрдиреНрдлрд░реЗрдВрд╕ рд░реЗрд╕ рдХрдВрдбреАрд╢рдиреНрд╕, рдирд▓ рд░реЗрдлрд╝рд░реЗрдВрд╕реЗрдЬрд╝, рдпрд╛ рдЕрдирдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рдЗрдВрд╕реНрдЯреИрдВрд╕реЗрдЬрд╝ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдЦрд╝реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреВрд░реЗ рдЗрдиреНрдлрд░реЗрдВрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдирд▓ рдЪреЗрдХреНрд╕ рдФрд░ рдПрдХреНрд╕реЗрдкреНрд╢рди рдХреИрдЪ рдЬреЛрдбрд╝реЗред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗрд╡рд▓ рд╡реИрдз рдореЙрдбрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рд╣реА рдЖрдЧреЗ рдмрдврд╝реЗ, рдФрд░ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдлрд╝-рд╕реБрдерд░реЗ рдврдВрдЧ рд╕реЗ рдХреИрдЪ рдХрд░реЗред
as LlmModelInstance?рдХрд╛рд╕реНрдЯ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдПрд▓реНрд╡рд┐рд╕-рдЬреИрд╕рд╛ рдлреЙрд▓рдмреИрдХ рдпрджрд┐ рдирд▓ рд╣реЛ рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рддреБрд░рдВрдд рд░реЛрдХ рджреЗрддрд╛ рд╣реИред try/catch рдореЗрдВ рдмреНрд▓реЙрдХ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдХреЛрдИ рднреА рдПрдХреНрд╕реЗрдкреНрд╢рди рдкрдХрдбрд╝ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдПрд░рд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЪрд░рдг 6: рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдРрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рд░рди рдХрд░реЗрдВ
рдЬрдм рдЖрдк рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░ рд▓реЗрдВ, рддреЛ рд╣рдо рдРрдк рдЪрд▓рд╛рдПрдБрдЧреЗред рдЕрдкрдиреЗ рд▓реЛрдХрд▓ Android рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдРрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде Android Studio рдореЗрдВ рд╡рд╛рдпрд░рд▓реЗрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреЗрдпрд░ рдХрд░реЗрдВред
рдЪрд░рдг 6.1: Android рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ
рдЕрдкрдиреЗ Android рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ Settings рдРрдк рдореЗрдВ рдЬрд╛рдПрдБ рдФрд░ Developer options рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рдлрд┐рд░ Wireless debugging рдЪрд╛рд▓реВ рдХрд░реЗрдВред рдЖрдкрдХреЛ рджреЛ рдкреЗрдпрд░рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╡рд╛рд▓реА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред
рдЪрд░рдг 6.2: Android Studio рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ
Android Studio рдореЗрдВ Device Manager рдЦреЛрд▓реЗрдВ (рдЖрдЗрдХрди рдкрд░ Android рд▓реЛрдЧреЛ рд╡рд╛рд▓рд╛ рдлрд╝реЛрди рджрд┐рдЦрддрд╛ рд╣реИ) рдФрд░ Pair using QR code рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ QR рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВ рдФрд░ рдкреЗрдпрд░рд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░, Device Manager рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдирд╛рдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдФрд░ Android рдбрд┐рд╡рд╛рдЗрд╕ рджреЛрдиреЛрдВ рдПрдХ рд╣реА WiFi рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрдВред
рдЪрд░рдг 6.3: рдРрдк рдЪрд▓рд╛рдПрдБ
Android рдбрд┐рд╡рд╛рдЗрд╕ рдорд┐рд░рд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Device Mirroring рдЖрдЗрдХрди (рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реНрдХреНрд░реАрди рдФрд░ рдлрд╝реЛрди рд╕реНрдХреНрд░реАрди рджрд┐рдЦрддреА рд╣реИ) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЬреИрд╕реЗ рд╣реА рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдорд┐рд░рд░ рд╣реЛ рдЬрд╛рдП, рд╣рд░реЗ Run рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдРрдк рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рд╣реЛ рдЬрд╛рдПред
рдЪрд░рдг 6.4: рдореЙрдбрд▓реЛрдВ рдХреЛ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдРрдк рд▓реЙрдиреНрдЪ рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдЦреБрд▓реЗрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
writeрдЯреЛрдХрди рдХреЗ рд╕рд╛рде Hugging Face рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧреАредHuggingFace рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрдпрдирд┐рдд рдореЙрдбрд▓ рдкрд░ start download рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХрд╛ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
gemma3-270m-it-q8рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЕрдм рдЖрдк рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЪрд░рдг 7: рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдП:
рдкреНрд░рдпреЛрдЧ 1: рдлреНрд░реА-рдлрд╝реЙрд░реНрдо рд▓реЗрдЦрди
рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдлреНрд░реА-рдлрд╝реЙрд░реНрдо рдХрд╣рд╛рдиреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд┐рдпрд╛, рдФрд░ рдпреЗ рдкрд░рд┐рдгрд╛рдо рд░рд╣реЗ:
рдореЙрдбрд▓ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдп-рд╡рд╕реНрддреБ рдкрд░ рдЕрд╕рд░рджрд╛рд░ рдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЦреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд╛рдорд╛рдиреНрдп-рд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд▓рдВрдмреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдореЙрдбрд▓ рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рд╡рд╛рдХреНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рдЫреЛрдЯреЗ рдкреЛрд╕реНрдЯреНрд╕, рд╡рд┐рд╡рд░рдгреЛрдВ рдФрд░ рдЖрдЙрдЯрд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдмрдирддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдлрд░реНрд╕реНрдЯ-рдЯреЛрдХрди рдЬреЗрдирд░реЗрд╢рди рдХрд╝рд░реАрдм 0.53 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдлрд╝реА рддреЗрдЬрд╝ рд╣реИ, рдФрд░ рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдиреНрдлрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдб рд╕реНрдкреАрдб рднреА рдЕрдЪреНрдЫреА рд╣реИред
рдкреНрд░рдпреЛрдЧ 2: рдЯреЛрди рд░реА-рд░рд╛рдЗрдЯ
рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ Gemma 3 270M рд╕реЗ рдЙрд╕реЗ рдлреНрд░реЗрдВрдбрд▓реА рдЯреЛрди рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЛ рдХрд╣рд╛ред
рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди-рдлрд╝реЙрд▓реЛрдЗрдВрдЧ рдордЬрд╝рдмреВрдд рд╣реИтАФрдФрдкрдЪрд╛рд░рд┐рдХ, рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдФрд░ рдлреНрд░реЗрдВрдбрд▓реА рдЯреЛрди рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реБрдП рднреА рдЕрд░реНрде рдмрд░рдХрд╝рд░рд╛рд░ рд░рд╣рддрд╛ рд╣реИред рдЫреЛрдЯреЗ рдкреИрд╕реЗрдЬ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рд▓рдЧрднрдЧ рддреНрд╡рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдИрдореЗрд▓ рдкреЙрд▓рд┐рд╢ рдХрд░рдиреЗ рдпрд╛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХрдиреНрд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдкреНрд░рдпреЛрдЧ 3: рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд╕рд╛рд░
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмреБрд▓реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдВ рд╕рдорд░реА рднреА рдХрд┐рдпрд╛ред рдЖрдк рд╕рдорд░реА, рдкреЙрдЗрдВрдЯреНрд╕, рдЯреЗрдХрдЕрд╡реЗ рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдореЙрдбрд▓ рд╕рдорд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдЫреЛрдЯреЗ рдФрд░ рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдЧреНрдЬрд╝реАрдХреНрдпреВрдЯрд┐рд╡ рд╕рдорд░реА, рдмреБрд▓реЗрдЯ рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ рдпрд╛ TL;DR рд╢рд╛рдорд┐рд▓ рд╣реИрдВред┬а
рдкреНрд░рдпреЛрдЧ 4: рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд░рд╛рдЗрдЯрд░
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЛ рдХрд╣рд╛ред рдпрд╣ рдкрд╛рдпрд╛:
рдореЙрдбрд▓ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдФрд░ рдЫреЛрдЯреЗ рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬрд╝ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЗрдореНрдкреЛрд░реНрдЯреНрд╕, рдПрдЬ рдХреЗрд╕, рдпрд╛ рдЬрдЯрд┐рд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЧрд╛рдЗрдбреЗрдВрд╕ рдХреЗ рдмрд┐рдирд╛ рдорд┐рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЫреЛрдЯреЗ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рддреЗрдЬрд╝реА рд╕реЗ рдмрдирддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд▓рдВрдмреА рдХрдореНрдкреНрд▓реАрд╢рдиреНрд╕ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдмрдврд╝рдиреЗ рдкрд░ рдереЛрдбрд╝реА рдзреАрдореА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред┬а
рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдпрд╣ GitHub рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗрдЯ рдЕрдк рдХрд░ рджреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдордиреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг рджреЗрдЦрд╛ рдХрд┐ Gemma 3 270M рдореЙрдбрд▓ рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдБтАФрдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдХрд╕реНрдЯрдо Android рдРрдк рдореЗрдВ рд╡рд╛рдпрд░ рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдФрд░ рдЗрдиреНрдлрд░реЗрдВрд╕-рдЯрд╛рдЗрдо рд╕реЗрдлрд╝реНрдЯреА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рддрдХред
Gemma 3 рддреЗрдЬрд╝ рдЗрдиреНрдлрд░реЗрдВрд╕, рдХрдо рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдУрд╡рд░рд╣реЗрдб, рдмрд╣реБрдд рдХрдо рдкрд╛рд╡рд░ рдЙрдкрдпреЛрдЧ, INT4 рдХреНрд╡рд╛рдВрдЯрд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдкреЛрд░реНрдЯ (рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ рдкрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде), рдФрд░ рдкреВрд░реНрдг рдСрди-рдбрд┐рд╡рд╛рдЗрд╕ рд░рдирд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред