Naarmate machine learning (ML) is gegroeid, zijn er veel open source-frameworks ontstaan, waardoor wat ooit was gereserveerd voor onderzoekers van kunstmatige intelligentie (AI) effectief werd gedemocratiseerd. Van deze frameworks is TensorFlow het populairst geworden voor het bouwen en uitvoeren van ML-modellen, en in het bijzonder de Python-implementatie die de meeste ontwikkeling heeft doorgemaakt.

TensorFlow heeft niet alleen een coole naam, maar het is ook 8217;s is eigenlijk afgeleid van de inherente grafische architectuur waarbij de knooppunten bewerkingen vertegenwoordigen, en de randen de tensoren zijn die in en uit de knooppunten stromen (vandaar de naam “TensorFlow”).

Natuurlijk is een ML-framework slechts een deel van de ML-vergelijking, en er is een sterk hardwareplatform voor nodig om modellen voor inferentie efficiënt uit te voeren. Het mobiele platform van Qualcomm Snapdragon is ontworpen voor hoogwaardige ML aan de rand en vormt een aanvulling op TensorFlow dankzij de uitgebreide set tools in de Qualcomm Neural Processing SDK voor kunstmatige intelligentie die getrainde TensorFlow-modellen omzet in voor Snapdragon geoptimaliseerde representaties.

Gezien de populariteit van TensorFlow, dachten we dat het nuttig zou zijn om het raamwerk zelf te verkennen om te zien hoe modellen worden gegenereerd. In deze blog bekijken we de API-lagen van TensorFlow, zien we hoe modellen worden geëxporteerd en bekijken we de tools van onze Neural Processing SDK voor kunstmatige intelligentie die deze modellen overbruggen met het heterogene mobiele platform Snapdragon.

API-lagenarchitectuur

TensorFlow wordt ondersteund op een breed scala aan hardwareplatforms en -talen en biedt een aantal API's, zoals samengevat in afbeelding 1:


Figuur 1: Huidige status van TensorFlow API-lagen en ondersteunde hardware. Merk op dat de “Layers API” is verwijderd in TensorFlow 2.0.

Beginnend met het onderliggende raamwerk, is de TensorFlow Distributed Execution Engine (uitvoeringsengine) de kern van TensorFlow die modellen traint en uitvoert. Als invoer worden TensorFlow-programma's gebruikt die zijn gecompileerd door de taalspecifieke frontend (bijv. Python-frontend), die de grafiek van bewerkingen en tensoren bevat. In code voeren ontwikkelaars compilatie en training uit op de uitvoeringsengine met behulp van het Session-object van TensorFlow. De uitvoeringsengine voert vervolgens optimalisaties uit door de grafiek te analyseren en waar mogelijk de gespecificeerde bewerkingen parallel aan te roepen.

Bovenop de uitvoeringsengine bevindt zich een stapel API's, die elk de ontwikkelaars in staat stellen op verschillende abstractieniveaus te werken. Voor de Python-frontend omvatten deze niveaus:

  • Lagen: het eerste abstractieniveau voor het bouwen van diepe neurale netwerken met behulp van zeer expliciete ML-constructies. Merk op dat deze laag is verwijderd in TensorFlow 2.0.
  • schatter:API's op hoog niveau om een ​​model te trainen, de nauwkeurigheid ervan te evalueren en zelfs gevolgtrekkingen uit te voeren met dat model. Deze API's bevatten een aantal standaardschatters (hieronder beschreven), of u kunt uw eigen schatters aanpassen op basis van de parameters die u doorgeeft aan het tf.estimator.Estimator-object.
  • Keras:een op Python gebaseerde API op hoog niveau, die aanvankelijk begon als een implementatie buiten TensorFlow. De Keras-API biedt momenteel het hoogste abstractieniveau, waardoor ML-beoefenaars zich kunnen concentreren op het bouwen van neurale netwerken, zonder zich bezig te houden met constructies en berekeningen op laag niveau (bijvoorbeeld de onderliggende algoritmen en wiskunde). Keras is nu volledig geïmplementeerd bovenop TensorFlow API's op een lager niveau en is opgenomen in de Python-distributie van TensorFlow.
  • Datasets: API's om gegevens te laden en te manipuleren, en deze te pipen in uw model. Ontwikkelaars kunnen bijvoorbeeld het object tf.data.Dataset gebruiken om trainingsgegevens te laden, de vorm ervan te transformeren en vervolgens de uitvoer te herhalen. De Datasets-API's kunnen worden gebruikt met een aantal andere API-lagen.
  • Ingebouwde schatters:vooraf gedefinieerde schatters die bij TensorFlow worden geleverd voor veelvoorkomende typen ML-modellen en problemen (bijv. tf.estimateor.LinearRegressor voor lineaire regressie).

Van deze API-niveaus is Keras’ rijke API op hoog niveau, is een populaire keuze geworden voor diegenen die snel modellen willen bouwen, prototypen en ermee willen experimenteren. Ontwikkelaars die meer controle nodig hebben, zullen waarschijnlijk de lagere API's gebruiken.

Checkpoints en opslaan

Bij het trainen van een model hebben TensorFlow-ontwikkelaars de mogelijkheid om controlepunten op te slaan, die de waarden van de parameters van het model (bijv. gewichten) serialiseren. Checkpoints kunnen handig zijn als de training wordt onderbroken en op een later moment moet worden voortgezet. IJkpunten verschillen van opgeslagen modellen (hieronder beschreven) doordat ze geen informatie over het model zelf bevatten en alleen nuttig zijn wanneer ze worden geladen door de API die het model bouwt (bijvoorbeeld om de training te hervatten, gewichten te delen met andere ML-beoefenaars die hetzelfde model hebben, enz.).

Er zijn een aantal bestanden gegenereerd door een TensorFlow-controlepuntbewerking, waaronder:

  • controlepunt:houdt een register bij van de laatste opgeslagen checkpoint-bestanden.
  • .data file(s): een verzameling shard-bestanden met de modelgewichten, biases, gradiënten en andere opgeslagen variabele waarden.
  • .index bestand: slaat op welke gewichten zijn opgeslagen in welke shard.
  • .meta bestand: bevat de volledige grafiekstructuur inclusief variabelen, bewerkingen, enz.

Ontwikkelaars slaan vaak controlepunten op na een bepaald aantal trainingsstappen (bijvoorbeeld 1000). Ze coderen meestal ook het aantal trainingsstappen in het achtervoegsel van .data-bestandsnamen om het controlepunt aan te geven waarmee ze overeenkomen. De volgende bestanden kunnen bijvoorbeeld bestaan ​​na twee controlepunten:

Figuur 2 – Voorbeeld van checkpoint-bestanden.

Zodra de ML-beoefenaar tevreden is met het getrainde model, kan het worden opgeslagen (geëxporteerd) naar het SavedModel Format (.pb-bestanden). Dit is een Protobuf-bestandsindeling die alles over het model opslaat, inclusief de uitvoeringsgrafiek, aangepaste objecten en lagen. Dit formaat biedt maximale draagbaarheid omdat het niet de originele broncode nodig heeft om het model te reconstrueren en het is over het algemeen het geprefereerde exportformaat voor productie voor .pb.

Het proces van het opslaan van het getrainde model voor gevolgtrekking wordt soms het bevriezen van het model genoemd omdat het alle aanvullende metadata (bijv. checkpoints) elimineert.

Overbrugging van modellen naar op Snapdragon gebaseerde apparaten

Zoals eerder vermeld, biedt Snapdragon uitgebreide ondersteuning voor het uitvoeren van inferentie op getrainde TensorFlow-modellen dankzij onze Neural Processing SDK voor kunstmatige intelligentie (AI). De inherente heterogene architectuur van Snapdragon betekent dat modellen kunnen worden uitgevoerd op de Qualcomm® Kryo™ CPU, Qualcomm® Adreno™ GPU en Qualcomm® Hexagon™ DSP van het platform. Dit wordt bereikt door het getrainde TensorFlow-model te converteren naar het Snapdragon-eigen .dlc-formaat met behulp van opdrachtregelprogramma's in de SDK:

Afbeelding 3 – Overzicht van het converteren van een getraind model naar het Snapdragon-eigen .dlc-formaat.

De SDK-tool die deze conversie uitvoert, is snpe-tensorflow-naar-dlc en vormt de kern van elk TensorFlow-naar-dlc-pijplijn. Zoals beschreven op de pagina TensorFlow-modelconversie, kan deze tool ofwel een bevroren TensorFlow-model of een modelcontrolepunt nemen en dit converteren naar .dlc-indeling.

Alvorens de SDK te gebruiken, moeten ontwikkelaars de TensorFlow-grafiekcompatibiliteitspagina bekijken, waarop wordt vermeld welke TensorFlow-grafiekbewerkingen compatibel zijn met de netwerklagen die door de SDK worden ondersteund. Ontwikkelaars hebben de mogelijkheid om niet-ondersteunde lagen te implementeren via door de gebruiker gedefinieerde bewerkingen (UDO)s.

De SDK biedt ook de volgende opdrachtregeltools waarmee ontwikkelaars hun ML-pijplijnen kunnen uitbreiden:

< ul>

  • snpe-dlc-quantize: kwantiseert een .dlc-bestand om de grootte te optimaliseren.
  • snpe-dlc-info: slaat laaginformatie op in een .csv-bestand.
  • snpe-dlc-diff: slaat de verschillen tussen twee .dlc-bestanden op in een .csv-bestand.
  • snpe-dlc-viewer: geeft de netwerkstructuur van een .dlc-bestand weer in een browser.
  • Uw Tensors naar Snapdragon stromen

    TensorFlow geeft modellen weer als een grafiek van knooppunten met bewerkingen en randen bestaande uit tensoren die door die knooppunten stromen. Het is deze flexibiliteit die ertoe heeft bijgedragen dat TensorFlow tegenwoordig een van de meest populaire open source ML-frameworks is. Om deze modellen naar de rand te brengen, biedt Qualcomm Technologies, Inc. een even flexibele en rijke SDK die deze modellen uitvoert met hardware-versnelde inferentie op mobiele apparaten aangedreven door Snapdragon.

    Als je wilt Bekijk voor meer informatie de volgende TensorFlow-projecten op QDN:

    • Objectdetectie met TensorFlow Lite
    • FaceBlock

    Bekijk ook enkele van onze andere recente ML-blogs over QDN:

    • Verkenning van verschillende soorten neurale netwerken
    • Implementatie van Machine Learning and Operations (MLOps)

    Hsin-I Hsu
    Senior productmanager, Qualcomm Technologies

    0

    Geef een antwoord

    Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *