Operatorët e mësimit të makinerive (ML) që përdorni në modelin tuaj mund të ndikojnë në procesin e konvertimit të një modeli TensorFlow në formatin LiteRT. Konvertuesi LiteRT mbështet një numër të kufizuar operacionesh TensorFlow të përdorura në modelet e zakonshme të konkluzioneve, që do të thotë se jo çdo model është drejtpërdrejt i konvertueshëm. Mjeti i konvertuesit ju lejon të përfshini operatorë shtesë, por konvertimi i një modeli në këtë mënyrë kërkon gjithashtu që të modifikoni mjedisin e kohës së ekzekutimit LiteRT që përdorni për të ekzekutuar modelin tuaj, gjë që mund të kufizojë aftësinë tuaj për të përdorur opsionet standarde të vendosjes së kohës së ekzekutimit, siç janë shërbimet e Google Play .
Konvertuesi LiteRT është krijuar për të analizuar strukturën e modelit dhe për të aplikuar optimizime në mënyrë që ta bëjë atë të pajtueshëm me operatorët e mbështetur drejtpërdrejt. Për shembull, në varësi të operatorëve ML në modelin tuaj, konverteri mund t'i eliminojë ose t'i bashkojë ata operatorë në mënyrë që t'i vendosë ato me homologët e tyre LiteRT.
Edhe për operacionet e mbështetura, ndonjëherë priten modele specifike përdorimi, për arsye të performancës. Mënyra më e mirë për të kuptuar se si të ndërtoni një model TensorFlow që mund të përdoret me LiteRT është të shqyrtoni me kujdes se si konvertohen dhe optimizohen operacionet, së bashku me kufizimet e vendosura nga ky proces.
Operatorët e mbështetur
Operatorët e integruar LiteRT janë një nëngrup i operatorëve që janë pjesë e bibliotekës thelbësore TensorFlow. Modeli juaj TensorFlow mund të përfshijë gjithashtu operatorë të personalizuar në formën e operatorëve të përbërë ose operatorëve të rinj të përcaktuar nga ju. Diagrami më poshtë tregon marrëdhëniet ndërmjet këtyre operatorëve.
Nga kjo gamë e operatorëve të modelit ML, ekzistojnë 3 lloje modelesh të mbështetura nga procesi i konvertimit:
- Modelet me vetëm operatorin e integruar LiteRT. ( Rekomandohet )
- Modeloni me operatorët e integruar dhe zgjidhni operatorët kryesorë TensorFlow.
- Modele me operatorë të integruar, operatorë kryesorë TensorFlow dhe/ose operatorë me porosi.
Nëse modeli juaj përmban vetëm operacione që mbështeten në mënyrë origjinale nga LiteRT, nuk keni nevojë për ndonjë flamur shtesë për ta kthyer atë. Kjo është rruga e rekomanduar sepse ky lloj modeli do të konvertohet pa probleme dhe është më i thjeshtë për t'u optimizuar dhe ekzekutuar duke përdorur kohën e parazgjedhur të LiteRT. Ju gjithashtu keni më shumë opsione vendosjeje për modelin tuaj, si p.sh. shërbimet e Google Play . Mund të filloni me udhëzuesin e konvertuesit LiteRT . Shikoni faqen LiteRT Ops për një listë të operatorëve të integruar.
Nëse keni nevojë të përfshini operacione të zgjedhura TensorFlow nga biblioteka kryesore, duhet të specifikoni atë në konvertim dhe të siguroheni që koha juaj e ekzekutimit të përfshijë ato operacione. Shikoni temën Select TensorFlow operatorët për hapa të detajuar.
Kurdoherë që është e mundur, shmangni opsionin e fundit të përfshirjes së operatorëve me porosi në modelin tuaj të konvertuar. Operatorët e personalizuar janë ose operatorë të krijuar duke kombinuar shumë operatorë kryesorë primitivë TensorFlow ose duke përcaktuar një krejtësisht të ri. Kur operatorët e personalizuar konvertohen, ata mund të rrisin madhësinë e modelit të përgjithshëm duke shkaktuar varësi jashtë bibliotekës së integruar LiteRT. Opsionet e personalizuara, nëse nuk krijohen posaçërisht për vendosjen e celularit ose pajisjes, mund të rezultojnë në performancë më të keqe kur vendosen në pajisje me burime të kufizuara në krahasim me një mjedis serveri. Së fundi, ashtu si përfshirja e operatorëve kryesorë të përzgjedhur të TensorFlow, operatorët e personalizuar kërkojnë që të modifikoni mjedisin e modelit të kohës së ekzekutimit , i cili ju kufizon të përfitoni nga shërbimet standarde të kohës së ekzekutimit, siç janë shërbimet e Google Play .
Llojet e mbështetura
Shumica e operacioneve LiteRT synojnë konkluzionet me pikë lundruese ( float32
) dhe të kuantizuar ( uint8
, int8
), por shumë opcione nuk e bëjnë ende për lloje të tjera si tf.float16
dhe vargjet.
Përveç përdorimit të versioneve të ndryshme të operacioneve, ndryshimi tjetër midis modeleve me pikë lundruese dhe modeleve të kuantizuara është mënyra se si ato konvertohen. Konvertimi i kuantizuar kërkon informacione të gamës dinamike për tensorët. Kjo kërkon "kuantizim të rremë" gjatë trajnimit të modelit, marrjen e informacionit të diapazonit nëpërmjet një grupi të dhënash kalibrimi ose kryerjen e vlerësimit "në fluturim" të diapazonit. Shihni kuantizimin për më shumë detaje.
Konvertime të drejtpërdrejta, palosje dhe shkrirje konstante
Një numër operacionesh TensorFlow mund të përpunohen nga LiteRT edhe pse nuk kanë ekuivalent të drejtpërdrejtë. Ky është rasti për operacionet që thjesht mund të hiqen nga grafiku ( tf.identity
), të zëvendësohen me tensorë ( tf.placeholder
) ose të shkrihen në operacione më komplekse ( tf.nn.bias_add
). Edhe disa operacione të mbështetura ndonjëherë mund të hiqen nëpërmjet njërit prej këtyre proceseve.
Këtu është një listë jo shteruese e operacioneve TensorFlow që zakonisht hiqen nga grafiku:
-
tf.add
-
tf.debugging.check_numerics
-
tf.constant
-
tf.div
-
tf.divide
-
tf.fake_quant_with_min_max_args
-
tf.fake_quant_with_min_max_vars
-
tf.identity
-
tf.maximum
-
tf.minimum
-
tf.multiply
-
tf.no_op
-
tf.placeholder
-
tf.placeholder_with_default
-
tf.realdiv
-
tf.reduce_max
-
tf.reduce_min
-
tf.reduce_sum
-
tf.rsqrt
-
tf.shape
-
tf.sqrt
-
tf.square
-
tf.subtract
-
tf.tile
-
tf.nn.batch_norm_with_global_normalization
-
tf.nn.bias_add
-
tf.nn.fused_batch_norm
-
tf.nn.relu
-
tf.nn.relu6
Operacionet Eksperimentale
Operacionet e mëposhtme LiteRT janë të pranishme, por jo të gatshme për modelet e personalizuara:
-
CALL
-
CONCAT_EMBEDDINGS
-
CUSTOM
-
EMBEDDING_LOOKUP_SPARSE
-
HASHTABLE_LOOKUP
-
LSH_PROJECTION
-
SKIP_GRAM
-
SVDF