Ars AI headline experiment finale - we kwamen, we zagen, we gebruikten veel rekentijd

We hebben misschien meer afgebeten dan we konden kauwen, mensen.

Een ingenieur van Amazon vertelde me dat toen hij hoorde wat ik probeerde te doen met de krantenkoppen van Ars, het eerste wat hij dacht was dat we een bedrieglijk moeilijk probleem hadden gekozen. Hij waarschuwde dat ik voorzichtig moest zijn met het stellen van mijn verwachtingen. Als dit een echt zakelijk probleem was… nou, het beste wat hij kon doen, was voorstellen het probleem te herformuleren van ‘goede of slechte kop’ naar iets minder concreets.

Die verklaring was de meest gezinsvriendelijke en beknopte manier om de uitkomst van mijn vier weken durende, parttime spoedcursus machine learning te formuleren. Vanaf dit moment zijn mijn PyTorch-kernels niet zozeer fakkels als wel afvalcontainers. De nauwkeurigheid is dankzij professioneel ingrijpen iets verbeterd, maar ik ben nog lang niet in de buurt van een werkende oplossing. Vandaag, aangezien ik naar verluidt voor het eerst in meer dan een jaar op vakantie ben bij mijn ouders, zat ik op een bank in hun woonkamer aan dit project te werken en lanceerde ik per ongeluk een modeltrainingsopdracht lokaal op de Dell-laptop die ik had meegebracht – met een 2,4 GHz Intel Core i3 7100U CPU – in plaats van in de SageMaker-kopie van dezelfde Jupyter-notebook. De Dell blokkeerde zo hard dat ik de batterij eruit moest trekken om hem opnieuw op te starten.

Maar goed, als de machine niet per se leert, ben ik dat in ieder geval wel. We zijn bijna aan het einde, maar als dit een klassikale opdracht was, zou mijn cijfer op het transcript waarschijnlijk een “Onvolledig” zijn.

Om het samen te vatten: ik kreeg de paren koppen die de afgelopen vijf jaar voor Ars-artikelen zijn gebruikt, met gegevens over de winnaars van de A/B-test en hun relatieve klikfrequenties. Toen werd mij gevraagd om SageMaker van Amazon Web Services te gebruiken om een ​​machine learning-algoritme te maken om de winnaar in toekomstige paren koppen te voorspellen. Ik belandde uiteindelijk in een aantal doodlopende steegjes van ML voordat ik verschillende Amazon-bronnen raadpleegde voor de broodnodige hulp.

De meeste stukken zijn op hun plaats om dit project te voltooien. Wij (nauwkeuriger gezegd, mijn “bel een vriend bij AWS”-reddingslijn) hadden enig succes met verschillende modelleringsbenaderingen, hoewel de nauwkeurigheidsscore (net ten noorden van 70 procent) niet zo definitief was als men zou willen. Ik heb genoeg om mee te werken om (met wat extra elleboogvet) een ingezet model en code te produceren om voorspellingen uit te voeren op paren koppen als ik hun aantekeningen maak en de algoritmen gebruik die als resultaat zijn gemaakt.

Maar ik moet eerlijk zijn: mijn pogingen om dat werk te reproduceren, zowel op mijn eigen lokale server als op SageMaker, zijn mislukt. Terwijl ik me een weg baande door de fijne kneepjes van SageMaker (inclusief het vergeten om notebooks af te sluiten, het uitvoeren van geautomatiseerde leerprocessen waarvan ik later werd verteld dat ze voor “zakelijke klanten” waren, en andere misstanden), heb ik meer AWS-budget verbruikt dan Ik zou het prettig vinden om aan een niet-gefinancierd avontuur te besteden. En hoewel ik intellectueel begrijp hoe ik de modellen moet implementeren die het resultaat zijn van al dit gedoe, ben ik nog steeds bezig met het debuggen van de daadwerkelijke uitvoering van die implementatie.

Dit project is in ieder geval een zeer interessante les geworden in alle manieren waarop machine learning-projecten (en de mensen erachter) kunnen mislukken. En de mislukking begon deze keer met de gegevens zelf – of zelfs met de vraag die we ermee wilden stellen.

Misschien krijg ik uit deze inspanning nog steeds een werkende oplossing. Maar in de tussentijd ga ik de dataset delen op mijn GitHub waarmee ik heb gewerkt om een ​​meer interactief onderdeel van dit avontuur te bieden. Als je betere resultaten kunt behalen, zorg er dan voor dat je volgende week met ons meedoet om me uit te dagen in de live-afsluiting van deze serie. (Meer details daarover aan het einde.)

Na verschillende iteraties van het afstemmen van het SqueezeBert-model dat we gebruikten in onze omgeleide poging om te trainen voor krantenkoppen, behaalde de resulterende set consequent 66 procent nauwkeurigheid bij het testen – iets minder dan de eerder gesuggereerde belofte van meer dan 70 procent.

Dit omvatte inspanningen om de grootte van de stappen die tussen leercycli worden genomen om input aan te passen, de “leersnelheid”-hyperparameter die wordt gebruikt om overfitting of underfitting van het model te voorkomen, te verminderen. We hebben de leersnelheid aanzienlijk verlaagd, omdat wanneer je een kleine hoeveelheid gegevens hebt (zoals we hier doen) en de leersnelheid te hoog is ingesteld, deze in feite grotere aannames zal doen in termen van de structuur en syntaxis van de dataset. Door dat te verminderen, wordt het model gedwongen die sprongen aan te passen aan kleine babystapjes. Onze oorspronkelijke leersnelheid was ingesteld op 2×10-5 (2E-5); we hebben dat teruggebracht tot 1E-5.

We hebben ook een veel groter model geprobeerd dat vooraf was getraind op een enorme hoeveelheid tekst, genaamd DeBERTa (Decoding-enhanced BERT with Disentangled Attention). DeBERTa is een zeer geavanceerd model: 48 Transform-lagen met 1,5 miljard parameters.

DeBERTa is zo mooi dat het beter presteerde dan mensen bij het begrijpen van natuurlijke taal in de SuperGLUE-benchmark – het eerste model dat dit deed.

Het resulterende implementatiepakket is ook behoorlijk fors: 2,9 gigabyte. Met al die extra machine learning-kracht kregen we een nauwkeurigheid van 72 procent. Aangezien DeBERTa zogenaamd beter is dan een mens als het gaat om het herkennen van betekenissen in tekst, is deze nauwkeurigheid, zoals een beroemde exploitant van een kerncentrale ooit zei, “niet geweldig, niet verschrikkelijk”.

Bovendien tikte de klok. Ik moest proberen een eigen versie aan de praat te krijgen om te testen met echte gegevens.

Een poging tot een lokale implementatie verliep niet goed, vooral niet vanuit het oogpunt van prestaties. Zonder een goede GPU beschikbaar, brachten de PyTorch-taken die het model en het eindpunt draaiden mijn systeem letterlijk tot stilstand.

Dus keerde ik terug naar het proberen te implementeren op SageMaker. Ik probeerde de kleinere SqueezeBert-modelleringstaak op SageMaker alleen uit te voeren, maar het werd al snel ingewikkelder. Training vereist PyTorch, het Python machine-learning framework, evenals een verzameling andere modules. Maar toen ik de verschillende Python-modules importeerde die nodig waren in mijn SageMaker PyTorch-kernel, kwamen ze ondanks updates niet goed overeen.

Als gevolg daarvan faalden delen van de code die op mijn lokale server werkten, en mijn inspanningen raakten verstrikt in een moeras van afhankelijkheidsverstrengeling. Het bleek een probleem te zijn met een versie van de NumPy-bibliotheek, behalve toen ik een herinstallatie forceerde (pip uninstall numpy, pip install numpy -no-cache-dir), de versie was hetzelfde en de fout bleef bestaan. Ik kreeg het eindelijk opgelost, maar toen kreeg ik een andere fout die me ervan weerhield om de trainingstaak uit te voeren en me opdroeg contact op te nemen met de klantenservice:

ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling the CreateTrainingJob operation: The account-level service limit 'ml.p3.2xlarge for training job usage' is 0 Instances, with current utilization of 0 Instances and a request delta of 1 Instances. Please contact AWS support to request an increase for this limit.

Om deze inspanning volledig te voltooien, moest ik Amazon ertoe brengen mijn quotum te verhogen – niet iets dat ik had verwacht toen ik begon met stoppen. Het is een gemakkelijke oplossing, maar het oplossen van moduleconflicten kostte het grootste deel van de dag. En de klok liep op me af toen ik probeerde te omzeilen met behulp van het vooraf gebouwde model dat mijn deskundige hulp bood, en het implementeerde als een SageMaker-eindpunt.

Deze inspanning zit nu in extra tijd. Dit is waar ik zou hebben besproken hoe het model het deed bij het testen tegen recente kopparen – als ik het model ooit op dat punt zou krijgen. Als ik het uiteindelijk kan halen, zal ik de uitkomst in de opmerkingen en in een notitie op mijn GitHub-pagina zetten.

By Admin

Leave a Reply

Your email address will not be published. Required fields are marked *