Clockworks Data Innovation BV
Het Groothandelsgebouw, E1.157
Stationsplein 45
3013 AK Rotterdam

Reduceer Cloud Computing Costs

Het runnen van AI-modellen in de cloud kan snel vrij duur worden. Krachtige GPU’s zoals de T4 van NVIDIA zijn cruciaal, maar hebben een stevig prijskaartje.

image

door Alexander Overvoorde

Solutions Architect

image

Het runnen van AI-modellen in de cloud kan snel vrij duur worden. Krachtige GPU’s zoals de T4 van NVIDIA zijn cruciaal, maar hebben een stevig prijskaartje.

In de begindagen van Clockworks betaalden we de volle mep, maar we wisten dat we met een kleine aantal kleine aanpassingen, we veel kostenefficiënter konden opereren.

Vandaag de dag besparen we honderden euro’s per maand en daar profiteren onze klanten ook van. Hoe we dat precies doen?

De eerste financiële quick win komt uit de wereld van de ongebruikte GPU-servers, ook wel bekend als:

“𝗧𝗵𝗲 𝗦𝗽𝗼𝘁 𝗠𝗮𝗿𝗸𝗲𝘁”.

Cloudproviders zoals Azure hebben vaak servercapaciteit die ongebruikt blijft. In plaats van ze verloren te laten gaan, verhuren ze ze met een fikse korting. In ons geval: Azure NVIDIA T4 GPU’s voor een fractie van de normale prijs.

Er zit alleen één addertje onder het gras: deze servers zijn tijdelijk. Ze kunnen op elk moment verdwijnen. Dus hoe bouw je daar iets betrouwbaars bovenop?

Zo doen we dat bij Clockworks:

Door onze modellen om te zetten naar Microsofts 𝗢𝗡𝗡𝗫 𝗳𝗼𝗿𝗺𝗮𝘁, worden ze binnen enkele seconden geladen, waardoor herstel van instance shutdowns bijna naadloos verloopt.
We behandelen servers als wegwerpartikelen en maken gebruik van gratis tijdelijke disk ruimte om modellen lokaal te cachen en dynamisch te verwisselen op basis van de behoeften van de klant.
Als een spot server wegvalt, kunnen we gemakkelijk een nieuwe aanmaken en de modellen herladen in slechts enkele seconden.

Het resultaat? Betrouwbare, snelle AI-prestaties tegen een fractie van de kosten.

Slimmer Inspecteren voor de NVWA

door Rob Weber

Senior Software Engineer

Sneller en betrouwbaarder inspecteren met Vision AI In samenwerking met de NVWA ontwikkelde Clockworks een slimme app die het werk van inspecteurs flink vereenvoudigt. Inspecteurs van de Nederlandse Voedsel- en Warenautoriteit (NVWA) controleren dagelijks of gewasbeschermingsmiddelen voldoen aan de regelgeving. Daarbij is één ding cruciaal: het toelatingsnummer. Dit unieke nummer bepaalt of een middel wel of niet is toegestaan op de Nederlandse markt. Tot voor kort betekende dit: elk etiket nauwkeurig aflezen, het nummer noteren en handmatig opzoeken in de database van het College voor de toelating van gewasbeschermingsmiddelen en biociden (CTGB). Tijdsintensief, foutgevoelig en omslachtig. Daar moest een slimmere oplossing voor komen. Samen maken we inspecteren slimmer Clockworks ontwikkelde een AI-gedreven app die het controleproces versnelt én betrouwbaarder maakt. De app is ontworpen in nauwe samenwerking met de NVWA, met aandacht voor de praktijk van inspecteurs in het veld. Afgelopen week is de eerste versie live gegaan in een pilot. De reacties zijn positief: de app werkt snel, intuïtief en scheelt aanzienlijk in tijd en moeite. Hoe het werkt De kracht zit in de eenvoud: De inspecteur maakt een foto van het etiket De Vision AI leest automatisch het toelatingsnummer van het middel De app checkt dit nummer direct in de officiële CTGB-database Binnen enkele seconden verschijnt op het scherm of het middel is toegestaan Geen handmatige invoer meer. Geen twijfel. Gewoon direct duidelijkheid. Wat het oplevert Deze oplossing laat zien hoe AI daadwerkelijk het verschil maakt in de praktijk: Snellere inspecties – minder tijd kwijt per controle Meer zekerheid – automatische controle voorkomt fouten Gebruiksgemak in het veld – ontworpen voor én met de mensen die ermee werken Bij Clockworks geloven we dat AI zichzelf moet bewijzen in de praktijk. Niet door ingewikkelde dashboards of abstracte modellen, maar door concrete oplossingen die het werk écht makkelijker maken. Deze samenwerking met de NVWA is daar een goed voorbeeld van. Door slimme technologie te koppelen aan een herkenbare werksituatie, ontstaat er een tool die precies doet wat nodig is—zonder poespas. We zijn trots op het resultaat en kijken uit naar de verdere uitrol.

Lees meer
Maak kennis met ‘PI-Test Mymic’

door Teo Cherici

AI Architect

Bij Clockworks schrijven we vaak pipelines die meerdere Deep Learning-modellen aanroepen, lokaal op de GPU of door verzoeken te doen aan een Triton-modelcluster. Het Probleem Helaas is het schrijven van tests voor deze pijplijnen vaak een gedoe: Een test de modellen direct laten aanroepen is eenvoudig in onze lokale ontwikkelomgevingen, maar moeilijk en broos in onze CI. In het verleden was onze standaardaanpak altijd om deze modelaanroepen te bespotten, maar dit gaat gepaard met verschillende problemen: De invoer van dergelijke modellen wordt effectief genegeerd. Als onverwachte veranderingen in de pijplijn ervoor zorgen dat de invoer van een modeloproep verandert, wordt dit niet weerspiegeld in de test. De gegenereerde outputs komen overeen met het formaat van de echte model outputs, maar niet met hun werkelijke inhoud. Hierdoor zijn de tests niet effectief in het verifiëren hoe het model wordt gebruikt in de context van een pijplijn. Het handmatig genereren van de uitvoer van dergelijke modelaanroepen is saai en omslachtig. Testsuites worden onoverzichtelijk met mocking code en moeilijk te begrijpen En dus dacht ik: er moet een betere manier zijn… Het idee Wat ik eigenlijk wilde was gewoon tests schrijven zonder me zorgen te maken over het al dan niet kunnen aanroepen van de modellen. In feite zijn modelaanroepen helemaal geen probleem in onze ontwikkelomgeving en worden ze alleen problematisch als ze automatisch in CI worden uitgevoerd. Hieruit kwam het idee: ik moest de tests één keer uitvoeren en daarbij de uitvoer van alle langzame en/of moeilijke aanroepen opnemen. Daarna kon ik, zolang de functie en invoer niet zouden veranderen, de opgenomen uitvoer gebruiken! Na wat experimenteren en iteraties in de ontwikkeling besloot ik om deze functionaliteit te ontwikkelen als een open-source publiek beschikbare pytest plugin. Een klein voorbeeld: Laten we eens laten zien hoe pytest-mimic werkt met een eenvoudig voorbeeld. Stel dat we een pijplijn met match_people_and_cars hebben geschreven die, gegeven een afbeelding, alle auto’s en mensen detecteert en elke auto toewijst aan een persoon op basis van hun uiterlijk: In deze (toegegeven: belachelijke) pijplijn zijn er drie aanroepen naar deep learning-modellen: detect_cars_and_people , car_autoencoder_model and people_autoencoder_model. Laten we er ook een paar eenvoudige tests voor schrijven: Stel nu dat alle drie de aanroepen naar de modellen onmogelijk zijn om uit te voeren in CI. Stel je voor dat je mocks schrijft voor elk van de modellen, voor elk van de tests. Vreselijk, toch? Ik weet zeker dat er genoeg manieren zijn om dit beter beheersbaar te maken, maar zou het niet fijn zijn om de tests gewoon zo te kunnen schrijven? Dat is waar pytest-mimic om de hoek komt kijken. Simpelweg de drie functies nabootsen in onze pytest configuratie: en voer de tests uit terwijl u opneemt in een omgeving waar de functieaanroepen kunnen worden gedaan (bijvoorbeeld op uw krachtige ontwikkelmachine met GPU-ondersteuning): pytest-mimiczal automatisch elke oproep opnemen en de uitvoer opslaan. Alle volgende pytest runs zullen in plaats daarvan gebruik maken van de opgenomen gesprekken! Merk op dat we geen boilerplate aan onze tests hoefden toe te voegen, waardoor ze kort en leesbaar blijven en toch hun effectiviteit behouden. In het bovengenoemde voorbeeld is pytest-mimic gebruikt om de moeite van het draaien van dure deep learning modellen in CI te vermijden, maar er zijn natuurlijk veel meer toepassingen. Enkele voorbeelden: Langzame functies nabootsen om de tijd die nodig is om een testsuite uit te voeren enorm te versnellen API-aanroepen nabootsen die sporadisch kunnen worden uitgevoerd, maar niet bij elke testrun Functies nabootsen die toegang hebben tot een externe bron die niet beschikbaar is in CI Merk echter op dat nabootsen niet altijd het juiste gereedschap is. Er zijn enkele beperkingen bij het gebruik van pytest-mimic , zoals: de ingangen van de nagebootste functie mogen niet variëren tussen de testruns (hoewel dit de beste toepassing is) de functies of methoden die worden nagebootst moeten atomair zijn (d.w.z. ze mogen de toestand van de invoer of andere externe objecten niet veranderen) De uitgangen moeten picklable zijn (zo worden ze opgeslagen op schijf) Mogelijk moet je gebruikmaken van git LFS of een andere tool om te voorkomen dat je archief verdrinkt met grote pickle bestanden. Als je zo ver bent gekomen: bedankt voor je aandacht en ik nodig je nogmaals uit om pytest-mimic uit te proberen.

Lees meer

Maak kennis
met onze
kunde in
het blog

Alle artikelen
Slimmer Inspecteren voor de NVWA

door Rob Weber

Senior Software Engineer

Sneller en betrouwbaarder inspecteren met Vision AI In samenwerking met de NVWA ontwikkelde Clockworks een slimme app die het werk van inspecteurs flink vereenvoudigt. Inspecteurs van de Nederlandse Voedsel- en Warenautoriteit (NVWA) controleren dagelijks of gewasbeschermingsmiddelen voldoen aan de regelgeving. Daarbij is één ding cruciaal: het toelatingsnummer. Dit unieke nummer bepaalt of een middel wel of niet is toegestaan op de Nederlandse markt. Tot voor kort betekende dit: elk etiket nauwkeurig aflezen, het nummer noteren en handmatig opzoeken in de database van het College voor de toelating van gewasbeschermingsmiddelen en biociden (CTGB). Tijdsintensief, foutgevoelig en omslachtig. Daar moest een slimmere oplossing voor komen. Samen maken we inspecteren slimmer Clockworks ontwikkelde een AI-gedreven app die het controleproces versnelt én betrouwbaarder maakt. De app is ontworpen in nauwe samenwerking met de NVWA, met aandacht voor de praktijk van inspecteurs in het veld. Afgelopen week is de eerste versie live gegaan in een pilot. De reacties zijn positief: de app werkt snel, intuïtief en scheelt aanzienlijk in tijd en moeite. Hoe het werkt De kracht zit in de eenvoud: De inspecteur maakt een foto van het etiket De Vision AI leest automatisch het toelatingsnummer van het middel De app checkt dit nummer direct in de officiële CTGB-database Binnen enkele seconden verschijnt op het scherm of het middel is toegestaan Geen handmatige invoer meer. Geen twijfel. Gewoon direct duidelijkheid. Wat het oplevert Deze oplossing laat zien hoe AI daadwerkelijk het verschil maakt in de praktijk: Snellere inspecties – minder tijd kwijt per controle Meer zekerheid – automatische controle voorkomt fouten Gebruiksgemak in het veld – ontworpen voor én met de mensen die ermee werken Bij Clockworks geloven we dat AI zichzelf moet bewijzen in de praktijk. Niet door ingewikkelde dashboards of abstracte modellen, maar door concrete oplossingen die het werk écht makkelijker maken. Deze samenwerking met de NVWA is daar een goed voorbeeld van. Door slimme technologie te koppelen aan een herkenbare werksituatie, ontstaat er een tool die precies doet wat nodig is—zonder poespas. We zijn trots op het resultaat en kijken uit naar de verdere uitrol.

Lees meer
Maak kennis met ‘PI-Test Mymic’

door Teo Cherici

AI Architect

Bij Clockworks schrijven we vaak pipelines die meerdere Deep Learning-modellen aanroepen, lokaal op de GPU of door verzoeken te doen aan een Triton-modelcluster. Het Probleem Helaas is het schrijven van tests voor deze pijplijnen vaak een gedoe: Een test de modellen direct laten aanroepen is eenvoudig in onze lokale ontwikkelomgevingen, maar moeilijk en broos in onze CI. In het verleden was onze standaardaanpak altijd om deze modelaanroepen te bespotten, maar dit gaat gepaard met verschillende problemen: De invoer van dergelijke modellen wordt effectief genegeerd. Als onverwachte veranderingen in de pijplijn ervoor zorgen dat de invoer van een modeloproep verandert, wordt dit niet weerspiegeld in de test. De gegenereerde outputs komen overeen met het formaat van de echte model outputs, maar niet met hun werkelijke inhoud. Hierdoor zijn de tests niet effectief in het verifiëren hoe het model wordt gebruikt in de context van een pijplijn. Het handmatig genereren van de uitvoer van dergelijke modelaanroepen is saai en omslachtig. Testsuites worden onoverzichtelijk met mocking code en moeilijk te begrijpen En dus dacht ik: er moet een betere manier zijn… Het idee Wat ik eigenlijk wilde was gewoon tests schrijven zonder me zorgen te maken over het al dan niet kunnen aanroepen van de modellen. In feite zijn modelaanroepen helemaal geen probleem in onze ontwikkelomgeving en worden ze alleen problematisch als ze automatisch in CI worden uitgevoerd. Hieruit kwam het idee: ik moest de tests één keer uitvoeren en daarbij de uitvoer van alle langzame en/of moeilijke aanroepen opnemen. Daarna kon ik, zolang de functie en invoer niet zouden veranderen, de opgenomen uitvoer gebruiken! Na wat experimenteren en iteraties in de ontwikkeling besloot ik om deze functionaliteit te ontwikkelen als een open-source publiek beschikbare pytest plugin. Een klein voorbeeld: Laten we eens laten zien hoe pytest-mimic werkt met een eenvoudig voorbeeld. Stel dat we een pijplijn met match_people_and_cars hebben geschreven die, gegeven een afbeelding, alle auto’s en mensen detecteert en elke auto toewijst aan een persoon op basis van hun uiterlijk: In deze (toegegeven: belachelijke) pijplijn zijn er drie aanroepen naar deep learning-modellen: detect_cars_and_people , car_autoencoder_model and people_autoencoder_model. Laten we er ook een paar eenvoudige tests voor schrijven: Stel nu dat alle drie de aanroepen naar de modellen onmogelijk zijn om uit te voeren in CI. Stel je voor dat je mocks schrijft voor elk van de modellen, voor elk van de tests. Vreselijk, toch? Ik weet zeker dat er genoeg manieren zijn om dit beter beheersbaar te maken, maar zou het niet fijn zijn om de tests gewoon zo te kunnen schrijven? Dat is waar pytest-mimic om de hoek komt kijken. Simpelweg de drie functies nabootsen in onze pytest configuratie: en voer de tests uit terwijl u opneemt in een omgeving waar de functieaanroepen kunnen worden gedaan (bijvoorbeeld op uw krachtige ontwikkelmachine met GPU-ondersteuning): pytest-mimiczal automatisch elke oproep opnemen en de uitvoer opslaan. Alle volgende pytest runs zullen in plaats daarvan gebruik maken van de opgenomen gesprekken! Merk op dat we geen boilerplate aan onze tests hoefden toe te voegen, waardoor ze kort en leesbaar blijven en toch hun effectiviteit behouden. In het bovengenoemde voorbeeld is pytest-mimic gebruikt om de moeite van het draaien van dure deep learning modellen in CI te vermijden, maar er zijn natuurlijk veel meer toepassingen. Enkele voorbeelden: Langzame functies nabootsen om de tijd die nodig is om een testsuite uit te voeren enorm te versnellen API-aanroepen nabootsen die sporadisch kunnen worden uitgevoerd, maar niet bij elke testrun Functies nabootsen die toegang hebben tot een externe bron die niet beschikbaar is in CI Merk echter op dat nabootsen niet altijd het juiste gereedschap is. Er zijn enkele beperkingen bij het gebruik van pytest-mimic , zoals: de ingangen van de nagebootste functie mogen niet variëren tussen de testruns (hoewel dit de beste toepassing is) de functies of methoden die worden nagebootst moeten atomair zijn (d.w.z. ze mogen de toestand van de invoer of andere externe objecten niet veranderen) De uitgangen moeten picklable zijn (zo worden ze opgeslagen op schijf) Mogelijk moet je gebruikmaken van git LFS of een andere tool om te voorkomen dat je archief verdrinkt met grote pickle bestanden. Als je zo ver bent gekomen: bedankt voor je aandacht en ik nodig je nogmaals uit om pytest-mimic uit te proberen.

Lees meer

Slimmer Inspecteren voor de NVWA

door Rob Weber

Senior Software Engineer

Sneller en betrouwbaarder inspecteren met Vision AI In samenwerking met de NVWA ontwikkelde Clockworks een slimme app die het werk van inspecteurs flink vereenvoudigt. Inspecteurs van de Nederlandse Voedsel- en Warenautoriteit (NVWA) controleren dagelijks of gewasbeschermingsmiddelen voldoen aan de regelgeving. Daarbij is één ding cruciaal: het toelatingsnummer. Dit unieke nummer bepaalt of een middel wel of niet is toegestaan op de Nederlandse markt. Tot voor kort betekende dit: elk etiket nauwkeurig aflezen, het nummer noteren en handmatig opzoeken in de database van het College voor de toelating van gewasbeschermingsmiddelen en biociden (CTGB). Tijdsintensief, foutgevoelig en omslachtig. Daar moest een slimmere oplossing voor komen. Samen maken we inspecteren slimmer Clockworks ontwikkelde een AI-gedreven app die het controleproces versnelt én betrouwbaarder maakt. De app is ontworpen in nauwe samenwerking met de NVWA, met aandacht voor de praktijk van inspecteurs in het veld. Afgelopen week is de eerste versie live gegaan in een pilot. De reacties zijn positief: de app werkt snel, intuïtief en scheelt aanzienlijk in tijd en moeite. Hoe het werkt De kracht zit in de eenvoud: De inspecteur maakt een foto van het etiket De Vision AI leest automatisch het toelatingsnummer van het middel De app checkt dit nummer direct in de officiële CTGB-database Binnen enkele seconden verschijnt op het scherm of het middel is toegestaan Geen handmatige invoer meer. Geen twijfel. Gewoon direct duidelijkheid. Wat het oplevert Deze oplossing laat zien hoe AI daadwerkelijk het verschil maakt in de praktijk: Snellere inspecties – minder tijd kwijt per controle Meer zekerheid – automatische controle voorkomt fouten Gebruiksgemak in het veld – ontworpen voor én met de mensen die ermee werken Bij Clockworks geloven we dat AI zichzelf moet bewijzen in de praktijk. Niet door ingewikkelde dashboards of abstracte modellen, maar door concrete oplossingen die het werk écht makkelijker maken. Deze samenwerking met de NVWA is daar een goed voorbeeld van. Door slimme technologie te koppelen aan een herkenbare werksituatie, ontstaat er een tool die precies doet wat nodig is—zonder poespas. We zijn trots op het resultaat en kijken uit naar de verdere uitrol.

Lees meer
Maak kennis met ‘PI-Test Mymic’

door Teo Cherici

AI Architect

Bij Clockworks schrijven we vaak pipelines die meerdere Deep Learning-modellen aanroepen, lokaal op de GPU of door verzoeken te doen aan een Triton-modelcluster. Het Probleem Helaas is het schrijven van tests voor deze pijplijnen vaak een gedoe: Een test de modellen direct laten aanroepen is eenvoudig in onze lokale ontwikkelomgevingen, maar moeilijk en broos in onze CI. In het verleden was onze standaardaanpak altijd om deze modelaanroepen te bespotten, maar dit gaat gepaard met verschillende problemen: De invoer van dergelijke modellen wordt effectief genegeerd. Als onverwachte veranderingen in de pijplijn ervoor zorgen dat de invoer van een modeloproep verandert, wordt dit niet weerspiegeld in de test. De gegenereerde outputs komen overeen met het formaat van de echte model outputs, maar niet met hun werkelijke inhoud. Hierdoor zijn de tests niet effectief in het verifiëren hoe het model wordt gebruikt in de context van een pijplijn. Het handmatig genereren van de uitvoer van dergelijke modelaanroepen is saai en omslachtig. Testsuites worden onoverzichtelijk met mocking code en moeilijk te begrijpen En dus dacht ik: er moet een betere manier zijn… Het idee Wat ik eigenlijk wilde was gewoon tests schrijven zonder me zorgen te maken over het al dan niet kunnen aanroepen van de modellen. In feite zijn modelaanroepen helemaal geen probleem in onze ontwikkelomgeving en worden ze alleen problematisch als ze automatisch in CI worden uitgevoerd. Hieruit kwam het idee: ik moest de tests één keer uitvoeren en daarbij de uitvoer van alle langzame en/of moeilijke aanroepen opnemen. Daarna kon ik, zolang de functie en invoer niet zouden veranderen, de opgenomen uitvoer gebruiken! Na wat experimenteren en iteraties in de ontwikkeling besloot ik om deze functionaliteit te ontwikkelen als een open-source publiek beschikbare pytest plugin. Een klein voorbeeld: Laten we eens laten zien hoe pytest-mimic werkt met een eenvoudig voorbeeld. Stel dat we een pijplijn met match_people_and_cars hebben geschreven die, gegeven een afbeelding, alle auto’s en mensen detecteert en elke auto toewijst aan een persoon op basis van hun uiterlijk: In deze (toegegeven: belachelijke) pijplijn zijn er drie aanroepen naar deep learning-modellen: detect_cars_and_people , car_autoencoder_model and people_autoencoder_model. Laten we er ook een paar eenvoudige tests voor schrijven: Stel nu dat alle drie de aanroepen naar de modellen onmogelijk zijn om uit te voeren in CI. Stel je voor dat je mocks schrijft voor elk van de modellen, voor elk van de tests. Vreselijk, toch? Ik weet zeker dat er genoeg manieren zijn om dit beter beheersbaar te maken, maar zou het niet fijn zijn om de tests gewoon zo te kunnen schrijven? Dat is waar pytest-mimic om de hoek komt kijken. Simpelweg de drie functies nabootsen in onze pytest configuratie: en voer de tests uit terwijl u opneemt in een omgeving waar de functieaanroepen kunnen worden gedaan (bijvoorbeeld op uw krachtige ontwikkelmachine met GPU-ondersteuning): pytest-mimiczal automatisch elke oproep opnemen en de uitvoer opslaan. Alle volgende pytest runs zullen in plaats daarvan gebruik maken van de opgenomen gesprekken! Merk op dat we geen boilerplate aan onze tests hoefden toe te voegen, waardoor ze kort en leesbaar blijven en toch hun effectiviteit behouden. In het bovengenoemde voorbeeld is pytest-mimic gebruikt om de moeite van het draaien van dure deep learning modellen in CI te vermijden, maar er zijn natuurlijk veel meer toepassingen. Enkele voorbeelden: Langzame functies nabootsen om de tijd die nodig is om een testsuite uit te voeren enorm te versnellen API-aanroepen nabootsen die sporadisch kunnen worden uitgevoerd, maar niet bij elke testrun Functies nabootsen die toegang hebben tot een externe bron die niet beschikbaar is in CI Merk echter op dat nabootsen niet altijd het juiste gereedschap is. Er zijn enkele beperkingen bij het gebruik van pytest-mimic , zoals: de ingangen van de nagebootste functie mogen niet variëren tussen de testruns (hoewel dit de beste toepassing is) de functies of methoden die worden nagebootst moeten atomair zijn (d.w.z. ze mogen de toestand van de invoer of andere externe objecten niet veranderen) De uitgangen moeten picklable zijn (zo worden ze opgeslagen op schijf) Mogelijk moet je gebruikmaken van git LFS of een andere tool om te voorkomen dat je archief verdrinkt met grote pickle bestanden. Als je zo ver bent gekomen: bedankt voor je aandacht en ik nodig je nogmaals uit om pytest-mimic uit te proberen.

Lees meer

Maak kennis
met onze
kunde in
het blog

Alle artikelen
Slimmer Inspecteren voor de NVWA

door Rob Weber

Senior Software Engineer

Sneller en betrouwbaarder inspecteren met Vision AI In samenwerking met de NVWA ontwikkelde Clockworks een slimme app die het werk van inspecteurs flink vereenvoudigt. Inspecteurs van de Nederlandse Voedsel- en Warenautoriteit (NVWA) controleren dagelijks of gewasbeschermingsmiddelen voldoen aan de regelgeving. Daarbij is één ding cruciaal: het toelatingsnummer. Dit unieke nummer bepaalt of een middel wel of niet is toegestaan op de Nederlandse markt. Tot voor kort betekende dit: elk etiket nauwkeurig aflezen, het nummer noteren en handmatig opzoeken in de database van het College voor de toelating van gewasbeschermingsmiddelen en biociden (CTGB). Tijdsintensief, foutgevoelig en omslachtig. Daar moest een slimmere oplossing voor komen. Samen maken we inspecteren slimmer Clockworks ontwikkelde een AI-gedreven app die het controleproces versnelt én betrouwbaarder maakt. De app is ontworpen in nauwe samenwerking met de NVWA, met aandacht voor de praktijk van inspecteurs in het veld. Afgelopen week is de eerste versie live gegaan in een pilot. De reacties zijn positief: de app werkt snel, intuïtief en scheelt aanzienlijk in tijd en moeite. Hoe het werkt De kracht zit in de eenvoud: De inspecteur maakt een foto van het etiket De Vision AI leest automatisch het toelatingsnummer van het middel De app checkt dit nummer direct in de officiële CTGB-database Binnen enkele seconden verschijnt op het scherm of het middel is toegestaan Geen handmatige invoer meer. Geen twijfel. Gewoon direct duidelijkheid. Wat het oplevert Deze oplossing laat zien hoe AI daadwerkelijk het verschil maakt in de praktijk: Snellere inspecties – minder tijd kwijt per controle Meer zekerheid – automatische controle voorkomt fouten Gebruiksgemak in het veld – ontworpen voor én met de mensen die ermee werken Bij Clockworks geloven we dat AI zichzelf moet bewijzen in de praktijk. Niet door ingewikkelde dashboards of abstracte modellen, maar door concrete oplossingen die het werk écht makkelijker maken. Deze samenwerking met de NVWA is daar een goed voorbeeld van. Door slimme technologie te koppelen aan een herkenbare werksituatie, ontstaat er een tool die precies doet wat nodig is—zonder poespas. We zijn trots op het resultaat en kijken uit naar de verdere uitrol.

Lees meer
Maak kennis met ‘PI-Test Mymic’

door Teo Cherici

AI Architect

Bij Clockworks schrijven we vaak pipelines die meerdere Deep Learning-modellen aanroepen, lokaal op de GPU of door verzoeken te doen aan een Triton-modelcluster. Het Probleem Helaas is het schrijven van tests voor deze pijplijnen vaak een gedoe: Een test de modellen direct laten aanroepen is eenvoudig in onze lokale ontwikkelomgevingen, maar moeilijk en broos in onze CI. In het verleden was onze standaardaanpak altijd om deze modelaanroepen te bespotten, maar dit gaat gepaard met verschillende problemen: De invoer van dergelijke modellen wordt effectief genegeerd. Als onverwachte veranderingen in de pijplijn ervoor zorgen dat de invoer van een modeloproep verandert, wordt dit niet weerspiegeld in de test. De gegenereerde outputs komen overeen met het formaat van de echte model outputs, maar niet met hun werkelijke inhoud. Hierdoor zijn de tests niet effectief in het verifiëren hoe het model wordt gebruikt in de context van een pijplijn. Het handmatig genereren van de uitvoer van dergelijke modelaanroepen is saai en omslachtig. Testsuites worden onoverzichtelijk met mocking code en moeilijk te begrijpen En dus dacht ik: er moet een betere manier zijn… Het idee Wat ik eigenlijk wilde was gewoon tests schrijven zonder me zorgen te maken over het al dan niet kunnen aanroepen van de modellen. In feite zijn modelaanroepen helemaal geen probleem in onze ontwikkelomgeving en worden ze alleen problematisch als ze automatisch in CI worden uitgevoerd. Hieruit kwam het idee: ik moest de tests één keer uitvoeren en daarbij de uitvoer van alle langzame en/of moeilijke aanroepen opnemen. Daarna kon ik, zolang de functie en invoer niet zouden veranderen, de opgenomen uitvoer gebruiken! Na wat experimenteren en iteraties in de ontwikkeling besloot ik om deze functionaliteit te ontwikkelen als een open-source publiek beschikbare pytest plugin. Een klein voorbeeld: Laten we eens laten zien hoe pytest-mimic werkt met een eenvoudig voorbeeld. Stel dat we een pijplijn met match_people_and_cars hebben geschreven die, gegeven een afbeelding, alle auto’s en mensen detecteert en elke auto toewijst aan een persoon op basis van hun uiterlijk: In deze (toegegeven: belachelijke) pijplijn zijn er drie aanroepen naar deep learning-modellen: detect_cars_and_people , car_autoencoder_model and people_autoencoder_model. Laten we er ook een paar eenvoudige tests voor schrijven: Stel nu dat alle drie de aanroepen naar de modellen onmogelijk zijn om uit te voeren in CI. Stel je voor dat je mocks schrijft voor elk van de modellen, voor elk van de tests. Vreselijk, toch? Ik weet zeker dat er genoeg manieren zijn om dit beter beheersbaar te maken, maar zou het niet fijn zijn om de tests gewoon zo te kunnen schrijven? Dat is waar pytest-mimic om de hoek komt kijken. Simpelweg de drie functies nabootsen in onze pytest configuratie: en voer de tests uit terwijl u opneemt in een omgeving waar de functieaanroepen kunnen worden gedaan (bijvoorbeeld op uw krachtige ontwikkelmachine met GPU-ondersteuning): pytest-mimiczal automatisch elke oproep opnemen en de uitvoer opslaan. Alle volgende pytest runs zullen in plaats daarvan gebruik maken van de opgenomen gesprekken! Merk op dat we geen boilerplate aan onze tests hoefden toe te voegen, waardoor ze kort en leesbaar blijven en toch hun effectiviteit behouden. In het bovengenoemde voorbeeld is pytest-mimic gebruikt om de moeite van het draaien van dure deep learning modellen in CI te vermijden, maar er zijn natuurlijk veel meer toepassingen. Enkele voorbeelden: Langzame functies nabootsen om de tijd die nodig is om een testsuite uit te voeren enorm te versnellen API-aanroepen nabootsen die sporadisch kunnen worden uitgevoerd, maar niet bij elke testrun Functies nabootsen die toegang hebben tot een externe bron die niet beschikbaar is in CI Merk echter op dat nabootsen niet altijd het juiste gereedschap is. Er zijn enkele beperkingen bij het gebruik van pytest-mimic , zoals: de ingangen van de nagebootste functie mogen niet variëren tussen de testruns (hoewel dit de beste toepassing is) de functies of methoden die worden nagebootst moeten atomair zijn (d.w.z. ze mogen de toestand van de invoer of andere externe objecten niet veranderen) De uitgangen moeten picklable zijn (zo worden ze opgeslagen op schijf) Mogelijk moet je gebruikmaken van git LFS of een andere tool om te voorkomen dat je archief verdrinkt met grote pickle bestanden. Als je zo ver bent gekomen: bedankt voor je aandacht en ik nodig je nogmaals uit om pytest-mimic uit te proberen.

Lees meer