Zephyrnet-logo

Versnel ML-ontwikkeling met behulp van SageMaker Feature Store en Apache Iceberg offline winkelverdichting

Datum:

Tegenwoordig richten bedrijven feature stores op om een ​​centrale opslagplaats te bieden voor het opschalen van ML-ontwikkeling binnen bedrijfseenheden en datawetenschapsteams. Naarmate functiegegevens groter en complexer worden, moeten datawetenschappers deze functiearchieven efficiënt kunnen doorzoeken om datasets te extraheren voor experimenten, modeltraining en batchscores.

Amazon SageMaker Feature Store is een speciaal gebouwde oplossing voor functiebeheer die datawetenschappers en ML-engineers helpt bij het veilig opslaan, ontdekken en delen van samengestelde gegevens die worden gebruikt in trainings- en voorspellingsworkflows. SageMaker Feature Store ondersteunt nu Apache-ijsberg als een tabelformaat voor het opslaan van functies. Dit versnelt de modelontwikkeling door snellere queryprestaties mogelijk te maken bij het extraheren van ML-trainingsdatasets, gebruikmakend van Iceberg-tabelverdichting. Afhankelijk van het ontwerp van uw functiegroepen en hun schaal, kunt u prestatieverbeteringen van trainingsquery's van 10x tot 100x ervaren door deze nieuwe mogelijkheid te gebruiken.

Aan het einde van dit bericht weet u hoe u functiegroepen kunt maken met behulp van het Iceberg-formaat, de procedures voor tafelbeheer van Iceberg kunt uitvoeren met behulp van Amazone Atheneen plan deze taken om autonoom uit te voeren. Als u een Spark-gebruiker bent, leert u ook hoe u dezelfde procedures kunt uitvoeren met behulp van Spark en deze kunt integreren in uw eigen Spark-omgeving en -automatisering.

SageMaker Feature Store en Apache Iceberg

Amazon SageMaker Feature Store is een gecentraliseerde opslagplaats voor functies en bijbehorende metadata, waardoor functies eenvoudig kunnen worden ontdekt en hergebruikt door teams van datawetenschappers die aan verschillende projecten of ML-modellen werken.

SageMaker Feature Store bestaat uit een online en een offline modus voor het beheren van functies. De online winkel wordt gebruikt voor real-time deductiegebruiksgevallen met lage latentie. De offline winkel wordt voornamelijk gebruikt voor batchvoorspellingen en modeltraining. De offline winkel is een append-only store en kan worden gebruikt om historische functiegegevens op te slaan en te openen. Met de offline winkel kunnen gebruikers functies voor verkenning en batchscores opslaan en gebruiken, en op een bepaald tijdstip correcte datasets extraheren voor modeltraining.

De offline winkelgegevens worden opgeslagen in een Amazon Simple Storage Service-bucket (Amazon S3) in uw AWS-account. SageMaker Feature Store bouwt automatisch een AWS Glue Data Catalog op tijdens het maken van featuregroepen. Klanten hebben ook toegang tot offline winkelgegevens met behulp van een Spark-runtime en kunnen big data-verwerking uitvoeren voor ML-functieanalyse en use-cases voor functie-engineering.

Tabelindelingen bieden een manier om gegevensbestanden als een tabel te abstraheren. In de loop der jaren zijn er veel tabelindelingen ontstaan ​​ter ondersteuning van ACID-transactie-, governance- en catalogusgebruiksscenario's. Apache-ijsberg is een open tabelformaat voor zeer grote analytische datasets. Het beheert grote verzamelingen bestanden als tabellen en het ondersteunt moderne analytische data lake-bewerkingen zoals invoeg-, update-, verwijder- en tijdreisquery's op recordniveau. Iceberg volgt individuele databestanden in een tabel in plaats van in mappen. Hierdoor kunnen schrijvers gegevensbestanden op hun plaats maken (bestanden worden niet verplaatst of gewijzigd) en alleen bestanden aan de tabel toevoegen in een expliciete commit. De tabelstatus wordt bijgehouden in metadatabestanden. Alle wijzigingen in de tabelstatus creëren een nieuwe metadatabestandsversie die de oudere metadata atomisch vervangt. Het tabelmetagegevensbestand houdt het tabelschema, de partitioneringsconfiguratie en andere eigenschappen bij.

Iceberg heeft integraties met AWS-services. U kunt bijvoorbeeld de AWS lijm Data Catalog als de metastore voor Iceberg-tabellen, en Athene ondersteunt lees-, tijdreis-, schrijf- en DDL-query's voor Apache Iceberg-tabellen die de Apache Parquet-indeling gebruiken voor gegevens en de AWS Glue-catalogus voor hun metastore.

Met SageMaker Feature Store kunt u nu feature-groepen maken met de Iceberg-tabelindeling als alternatief voor de standaard standaard Glue-indeling. Daarmee kunnen klanten gebruikmaken van het nieuwe tabelformaat om Iceberg's functies voor bestandscompressie en gegevenssnoei te gebruiken om te voldoen aan hun use-case en optimalisatievereisten. Met Iceberg kunnen klanten ook verwijderingen, time-travel queries, high-concurrency transacties en high-performance queries uitvoeren.

Door Iceberg te combineren als een tabelindeling en bewerkingen voor tabelonderhoud, zoals verdichting, krijgen klanten snellere queryprestaties bij het werken met offline functiegroepen op schaal, waardoor ze sneller ML-trainingsdatasets kunnen bouwen.

Het volgende diagram toont de structuur van de offline winkel met Iceberg als tabelindeling.

In de volgende secties leer je hoe je functiegroepen maakt met behulp van het Iceberg-formaat, hoe je Iceberg's tabelbeheerprocedures uitvoert met behulp van AWS Athena en hoe je AWS-services gebruikt om deze taken in te plannen om on-demand of volgens een schema uit te voeren. Als u een Spark-gebruiker bent, leert u ook hoe u dezelfde procedures kunt uitvoeren met Spark.

Voor stapsgewijze instructies bieden we ook een voorbeeld notebook, die te vinden is in GitHub. In dit bericht lichten we de belangrijkste onderdelen toe.

Functiegroepen maken met behulp van de Iceberg-tabelindeling

U moet eerst Iceberg selecteren als tabelindeling wanneer u nieuwe functiegroepen maakt. Een nieuwe optionele parameter TableFormat kan interactief worden ingesteld met behulp van Amazon SageMaker Studio of via code met behulp van de API of de SDK. Deze parameter accepteert de waarden ICEBERG or GLUE (voor het huidige AWS Glue-formaat). Het volgende codefragment laat zien hoe u een functiegroep maakt met behulp van de Iceberg-indeling en FeatureGroup.create API van de SageMaker SDK.

orders_feature_group_iceberg.create(
s3_uri=f"s3://{s3_bucket_name}/{prefix}",
record_identifier_name=record_identifier_feature_name,
event_time_feature_name=event_time_feature_name,
role_arn=role,
enable_online_store=True,
table_format=TableFormatEnum.ICEBERG
)

De tabel wordt automatisch aangemaakt en geregistreerd in de AWS Glue Data Catalog.

Nu de orders_feature_group_iceberg is gemaakt, kunt u functies opnemen met behulp van uw opnamepijplijn naar keuze. In dit voorbeeld nemen we records op met behulp van de FeatureGroup.ingest() API, die records van een Pandas DataFrame opneemt. U kunt ook de FeatureGroup().put_record API om individuele records op te nemen of streamingbronnen te verwerken. Spark-gebruikers kunnen ook Spark-dataframes opnemen met behulp van onze Vonkconnector.

orders_fg = FeatureGroup(name=orders_feature_group_iceberg_name,
sagemaker_session=feature_store_session)
orders_fg.ingest(data_frame=order_data, wait=True)

U kunt controleren of de records met succes zijn opgenomen door een query uit te voeren op de offline feature store. U kunt ook naar de S3-locatie navigeren en de nieuwe mappenstructuur bekijken.

Uitvoeren van Iceberg table management procedures

Amazone Athene is een serverloze SQL-query-engine die standaard Iceberg-beheerprocedures ondersteunt. In deze sectie gebruikt u Athena om de door u gemaakte offline functiegroep handmatig te comprimeren. Let op: u moet Athena-engine versie 3 gebruiken. Hiervoor kunt u een nieuwe werkgroep maken of een bestaande werkgroep configureren en de aanbevolen Athena-engine versie 3 selecteren. Raadpleeg voor meer informatie en instructies voor het wijzigen van uw Athena-engineversie Athena-engineversies wijzigen.

Naarmate gegevens zich opstapelen in een Iceberg-tabel, kunnen query's geleidelijk minder efficiënt worden vanwege de toegenomen verwerkingstijd die nodig is om extra bestanden te openen. Verdichting optimaliseert de structurele lay-out van de tabel zonder de inhoud van de tabel te wijzigen.

Om verdichting uit te voeren, gebruikt u de OPTIMIZE table REWRITE DATA commando voor het onderhoud van de verdichtingstafel in Athena. De volgende syntaxis laat zien hoe de gegevenslay-out van een objectgroep die is opgeslagen met behulp van de Iceberg-tabelindeling kan worden geoptimaliseerd. De sagemaker_featurestore staat voor de naam van de SageMaker Feature Store-database, en orders-feature-group-iceberg-post-comp-03-14-05-17-1670076334 is de naam van onze functiegroeptabel.

OPTIMIZE sagemaker_featurestore.orders-feature-group-iceberg-post-comp-03-14-05-17-1670076334 REWRITE DATA USING BIN_PACK

Na het uitvoeren van de opdracht optimaliseren, gebruikt u de VACUUM procedure, die de vervaldatum van momentopnamen uitvoert en verweesde bestanden verwijdert. Deze acties verminderen de grootte van de metadata en verwijderen bestanden die niet in de huidige tabelstatus zijn en ook ouder zijn dan de bewaarperiode die voor de tabel is opgegeven.

VACUUM sagemaker_featurestore.orders-feature-group-iceberg-post-comp-03-14-05-17-1670076334

Merk op dat tabeleigenschappen kunnen worden geconfigureerd met behulp van Athena's ALTER TABLE. Voor een voorbeeld van hoe u dit doet, zie de Athena-documentatie. voor VACUÜM, vacuum_min_snapshots_to_keep en vacuum_max_snapshot_age_seconds kan worden gebruikt om parameters voor het snoeien van snapshots te configureren.

Laten we eens kijken naar de prestatie-impact van het uitvoeren van verdichting op een voorbeeldfunctiegroeptabel. Voor testdoeleinden hebben we dezelfde functierecords voor bestellingen opgenomen in twee functiegroepen, orders-feature-group-iceberg-pre-comp-02-11-03-06-1669979003 en orders-feature-group-iceberg-post-comp-03-14-05-17-1670076334, met behulp van een geparallelliseerde SageMaker-verwerkingstaak met Scikit-Learn, wat resulteert in 49,908,135 objecten die zijn opgeslagen in Amazon S3 en een totale grootte van 106.5 GiB.

We voeren een query uit om de nieuwste momentopname te selecteren zonder duplicaten en zonder verwijderde records in de functiegroep orders-feature-group-iceberg-pre-comp-02-11-03-06-1669979003. Voorafgaand aan de verdichting duurde de vraag 1 uur en 27 minuten.

Vervolgens voeren we verdichting door orders-feature-group-iceberg-post-comp-03-14-05-17-1670076334 met behulp van de Athena OPTIMIZE-query, die de functiegroeptabel comprimeerde tot 109,851 objecten in Amazon S3 en een totale grootte van 2.5 GiB. Als we vervolgens dezelfde query uitvoeren na verdichting, nam de looptijd af tot 1 minuut en 13 seconden.

Met Iceberg-bestandscompressie is de uitvoeringstijd van query's aanzienlijk verbeterd. Voor dezelfde query nam de looptijd af van 1 uur en 27 minuten naar 1 minuut en 13 seconden, wat 71 keer sneller is.

IJsbergverdichting plannen met AWS-services

In deze sectie leert u hoe u de tabelbeheerprocedures kunt automatiseren om uw offline feature store compacter te maken. Het volgende diagram illustreert de architectuur voor het maken van functiegroepen in de Iceberg-tabelindeling en een volledig geautomatiseerde oplossing voor tabelbeheer, inclusief het comprimeren en opschonen van bestanden.

Op een hoog niveau maakt u een functiegroep met behulp van de Iceberg-tabelindeling en neemt u records op in de online functiewinkel. Functiewaarden worden automatisch gerepliceerd van de online winkel naar de historische offline winkel. Athena wordt gebruikt om de Iceberg-beheerprocedures uit te voeren. Om de procedures te plannen, stelt u een AWS lijm taak met behulp van een Python-shellscript en maak een AWS Glue-taakschema.

AWS Glue Job instellen

U gebruikt een AWS Glue-taak om de onderhoudswerkzaamheden aan de Iceberg-tafel volgens een schema uit te voeren. Eerst moet u een IAM-rol voor AWS Glue maken om machtigingen te hebben voor toegang tot Amazon Athena, Amazon S3 en CloudWatch.

Vervolgens moet u een Python-script maken om de Iceberg-procedures uit te voeren. U kunt de voorbeeldscript in GitHub. Het script voert de OPTIMIZE-query uit met behulp van boto3.

optimize_sql = f"optimize {database}.{table} rewrite data using bin_pack"

Het script is geparametriseerd met behulp van de AWS Glue getResolvedOptions(args, options) utility-functie die u toegang geeft tot de argumenten die aan uw script worden doorgegeven wanneer u een taak uitvoert. In dit voorbeeld kunnen de AWS-regio, de Iceberg-database en -tabel voor uw functiegroep, de Athena-werkgroep en de resultatenmap van de Athena-uitvoerlocatie worden doorgegeven als parameters voor de taak, waardoor dit script herbruikbaar wordt in uw omgeving.

Ten slotte maak je de eigenlijke AWS Glue-taak om het script als een shell in AWS Glue uit te voeren.

  • Navigeer naar de AWS Glue-console.
  • Kies de Vacatures tabblad onder AWS Glue Studio.
  • kies Python Shell-scripteditor.
  • Kies Een bestaand script uploaden en bewerken. Klikken creëren.
  • De Details van de baan Met de knop kunt u de AWS Glue-taak configureren. U moet de IAM-rol selecteren die u eerder hebt gemaakt. Selecteer Python 3.9 of de nieuwste beschikbare Python-versie.
  • In hetzelfde tabblad kunt u ook een aantal andere configuratie-opties definiëren, zoals Aantal nieuwe pogingen or Taak time-out. in Geavanceerde eigenschappen, kunt u taakparameters toevoegen om het script uit te voeren, zoals weergegeven in het onderstaande voorbeeldscherm.
  • Klik Bespaar.

In het Schema's tabblad kunt u het schema definiëren voor het uitvoeren van de onderhoudsprocedures van de feature store. De volgende schermafbeelding laat bijvoorbeeld zien hoe u de taak uitvoert volgens een schema van elke 6 uur.

U kunt taakuitvoeringen bewaken om runtime-statistieken te begrijpen, zoals voltooiingsstatus, duur en starttijd. U kunt ook de CloudWatch-logboeken voor de AWS Glue-taak controleren om te controleren of de procedures succesvol verlopen.

Uitvoeren van Iceberg table management taken met Spark

Klanten kunnen Spark ook gebruiken om de verdichtingstaken en onderhoudsmethoden te beheren. Zie voor meer informatie over de Spark-procedures de Spark-documentatie.

U moet eerst enkele van de algemene eigenschappen configureren.

%%configure -f
{ "conf": { "spark.sql.catalog.smfs": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.smfs.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.smfs.warehouse": "<YOUR_ICEBERG_DATA_S3_LOCATION>", "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.smfs.glue.skip-name-validation": "true" }
}

De volgende code kan worden gebruikt om de functiegroepen via Spark te optimaliseren.

spark.sql(f"""CALL smfs.system.rewrite_data_files(table => '{DATABASE}.`{ICEBERG_TABLE}`')""")

U kunt dan de volgende twee tabelonderhoudsprocedures uitvoeren om oudere snapshots en verweesde bestanden die niet langer nodig zijn te verwijderen.

spark.sql(f"""CALL smfs.system.expire_snapshots(table => '{DATABASE}.`{ICEBERG_TABLE}`', older_than => TIMESTAMP '{one_day_ago}', retain_last => 1)""")
spark.sql(f"""CALL smfs.system.remove_orphan_files(table => '{DATABASE}.`{ICEBERG_TABLE}`')""")

U kunt vervolgens de bovenstaande Spark-opdrachten opnemen in uw Spark-omgeving. U kunt bijvoorbeeld een taak maken die de bovenstaande optimalisatie uitvoert volgens een gewenst schema of in een pijplijn na opname.

Om het volledige codevoorbeeld te verkennen en het in uw eigen account uit te proberen, gaat u naar de GitHub repo.

Conclusie

SageMaker Feature Store biedt een speciaal gebouwde oplossing voor functiebeheer om organisaties te helpen ML-ontwikkeling te schalen over datawetenschapsteams. In dit bericht hebben we uitgelegd hoe u Apache Iceberg kunt gebruiken als tabelindeling en bewerkingen voor tabelonderhoud, zoals verdichting, om te profiteren van aanzienlijk snellere query's bij het werken met offline functiegroepen op schaal en, als resultaat, sneller trainingsdatasets te bouwen. Probeer het eens en laat ons weten wat je ervan vindt in de reacties.


Over de auteurs

Arnaud Lauer is een Senior Partner Solutions Architect in het Public Sector-team bij AWS. Hij stelt partners en klanten in staat om te begrijpen hoe AWS-technologieën het beste kunnen worden gebruikt om zakelijke behoeften te vertalen in oplossingen. Hij heeft meer dan 17 jaar ervaring in het leveren en ontwerpen van digitale transformatieprojecten in verschillende sectoren, waaronder de publieke sector, energie en consumptiegoederen. Arnaud heeft 12 AWS-certificeringen, waaronder de ML Specialty-certificering.

Ioán Catana is een Artificial Intelligence en Machine Learning Specialist Solutions Architect bij AWS. Hij helpt klanten bij het ontwikkelen en schalen van hun ML-oplossingen in de AWS Cloud. Ioan heeft meer dan 20 jaar ervaring, voornamelijk in het ontwerpen van software-architectuur en cloud-engineering.

Marc Roy is een Principal Machine Learning Architect voor AWS en helpt klanten bij het ontwerpen en bouwen van AI / ML-oplossingen. Marks werk omvat een breed scala aan ML-use-cases, met een primaire interesse in computervisie, deep learning en het schalen van ML binnen de onderneming. Hij heeft bedrijven in vele sectoren geholpen, waaronder verzekeringen, financiële dienstverlening, media en entertainment, gezondheidszorg, nutsbedrijven en productie. Mark heeft zes AWS-certificeringen, waaronder de ML Specialty-certificering. Voordat hij bij AWS kwam, was Mark meer dan 25 jaar architect, ontwikkelaar en technologieleider, waaronder 19 jaar in financiële dienstverlening.

Brandon Chatham is een software-engineer bij het SageMaker Feature Store-team. Hij is zeer gepassioneerd over het bouwen van elegante systemen die big data en machine learning binnen handbereik brengen.

spot_img

Laatste intelligentie

spot_img