เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines

เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines

สตูดิโอ Amazon SageMaker สามารถช่วยคุณสร้าง ฝึก ดีบัก ปรับใช้ และตรวจสอบโมเดลของคุณและจัดการเวิร์กโฟลว์แมชชีนเลิร์นนิง (ML) ท่อส่ง Amazon SageMaker ช่วยให้คุณสร้าง แพลตฟอร์ม MLOps ที่ปลอดภัย ปรับขนาดได้ และยืดหยุ่น ภายในสตูดิโอ

ในโพสต์นี้ เราจะอธิบายวิธีเรียกใช้งานการประมวลผล PySpark ภายในไปป์ไลน์ สิ่งนี้ทำให้ทุกคนที่ต้องการฝึกโมเดลโดยใช้ Pipelines เพื่อประมวลผลข้อมูลการฝึกล่วงหน้า ประมวลผลข้อมูลอนุมานภายหลัง หรือประเมินโมเดลโดยใช้ PySpark ความสามารถนี้มีความเกี่ยวข้องอย่างยิ่งเมื่อคุณต้องการประมวลผลข้อมูลขนาดใหญ่ นอกจากนี้ เรายังแสดงวิธีเพิ่มประสิทธิภาพขั้นตอน PySpark ของคุณโดยใช้การกำหนดค่าและบันทึก Spark UI

ท่อส่งเป็น อเมซอน SageMaker เครื่องมือสำหรับการสร้างและจัดการไปป์ไลน์ ML แบบ end-to-end เป็นบริการตามความต้องการที่มีการจัดการเต็มรูปแบบ ซึ่งรวมเข้ากับ SageMaker และบริการอื่นๆ ของ AWS ดังนั้นจึงสร้างและจัดการทรัพยากรให้กับคุณ สิ่งนี้ทำให้แน่ใจว่าอินสแตนซ์ได้รับการจัดเตรียมและใช้เมื่อรันไปป์ไลน์เท่านั้น นอกจากนี้ Pipelines ได้รับการสนับสนุนโดย SageMaker Python SDKให้คุณติดตามของคุณ สายข้อมูล และ ใช้ซ้ำขั้นตอน โดยการแคชเพื่อลดเวลาและต้นทุนในการพัฒนา ไปป์ไลน์ SageMaker สามารถใช้ได้ ขั้นตอนการประมวลผล เพื่อประมวลผลข้อมูลหรือทำการประเมินโมเดล

เมื่อประมวลผลข้อมูลขนาดใหญ่ นักวิทยาศาสตร์ข้อมูลและวิศวกร ML มักจะใช้ ไพสปาร์คอินเทอร์เฟซสำหรับ Apache Spark ในไพธอน SageMaker นำเสนออิมเมจ Docker ที่สร้างไว้ล่วงหน้าซึ่งรวมถึง PySpark และการพึ่งพาอื่นๆ ที่จำเป็นสำหรับการเรียกใช้งานการประมวลผลข้อมูลแบบกระจาย รวมถึงการแปลงข้อมูลและวิศวกรรมคุณลักษณะโดยใช้กรอบงาน Spark แม้ว่าอิมเมจเหล่านั้นจะช่วยให้คุณสามารถเริ่มใช้ PySpark ได้อย่างรวดเร็วในงานประมวลผล แต่การประมวลผลข้อมูลขนาดใหญ่มักต้องการการกำหนดค่า Spark เฉพาะ เพื่อเพิ่มประสิทธิภาพการประมวลผลแบบกระจายของคลัสเตอร์ที่สร้างโดย SageMaker

ในตัวอย่างของเรา เราสร้างไปป์ไลน์ SageMaker ที่รันขั้นตอนการประมวลผลเดียว สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนอื่นๆ ที่คุณสามารถเพิ่มไปยังไปป์ไลน์ได้ โปรดดูที่ ขั้นตอนท่อ.

ไลบรารีการประมวลผล SageMaker

การประมวลผลของ SageMaker สามารถทำงานได้อย่างเฉพาะเจาะจง กรอบ (เช่น SKlearnProcessor, PySparkProcessor หรือ Hugging Face) โดยไม่ขึ้นกับกรอบงานที่ใช้ การประมวลผลขั้นตอน ต้องการสิ่งต่อไปนี้:

  • ชื่อสเต็ป – ชื่อที่จะใช้สำหรับขั้นตอนไปป์ไลน์ SageMaker ของคุณ
  • อาร์กิวเมนต์ขั้นตอน – ข้อโต้แย้งสำหรับคุณ ProcessingStep

นอกจากนี้ คุณสามารถระบุสิ่งต่อไปนี้:

  • การกำหนดค่าสำหรับแคชขั้นตอนของคุณเพื่อหลีกเลี่ยงการเรียกใช้ขั้นตอนของคุณโดยไม่จำเป็นในไปป์ไลน์ SageMaker
  • รายการชื่อขั้นตอน อินสแตนซ์ขั้นตอน หรืออินสแตนซ์การรวบรวมขั้นตอนที่ ProcessingStep ขึ้นอยู่กับ
  • ชื่อที่แสดงของ ProcessingStep
  • คำอธิบายของ ProcessingStep
  • ไฟล์คุณสมบัติ
  • ลองนโยบายอีกครั้ง

ข้อโต้แย้งจะถูกส่งไปยัง ProcessingStep. คุณสามารถใช้ไฟล์ sagemaker.spark.PySparkโปรเซสเซอร์ or sagemaker.spark.SparkJar โปรเซสเซอร์ คลาสเพื่อเรียกใช้แอปพลิเคชัน Spark ของคุณภายในงานประมวลผล

โปรเซสเซอร์แต่ละตัวมาพร้อมกับความต้องการของตนเอง ขึ้นอยู่กับเฟรมเวิร์ก นี่เป็นภาพประกอบที่ดีที่สุดโดยใช้ PySparkProcessorซึ่งคุณสามารถส่งข้อมูลเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ ProcessingStep ต่อไป เช่น ผ่านทาง configuration พารามิเตอร์เมื่อรันงานของคุณ

เรียกใช้งาน SageMaker Processing ในสภาพแวดล้อมที่ปลอดภัย

มันเป็น ปฏิบัติที่ดีที่สุด เพื่อสร้าง Amazon VPC ส่วนตัวและกำหนดค่าเพื่อไม่ให้งานของคุณเข้าถึงได้ทางอินเทอร์เน็ตสาธารณะ งานการประมวลผลของ SageMaker ช่วยให้คุณสามารถระบุเครือข่ายย่อยส่วนตัวและกลุ่มความปลอดภัยใน VPC ของคุณ รวมทั้งเปิดใช้งานการแยกเครือข่ายและการเข้ารหัสทราฟฟิกระหว่างคอนเทนเนอร์โดยใช้ NetworkConfig.VpcConfig ขอพารามิเตอร์ของ CreateProcessingJob เอพีไอ เรามีตัวอย่างการกำหนดค่านี้โดยใช้ SDK ของ SageMaker ในส่วนถัดไป

ขั้นตอนการประมวลผล PySpark ภายในท่อส่ง SageMaker

สำหรับตัวอย่างนี้ เราถือว่าคุณได้ทำให้ Studio ใช้งานได้ในสภาพแวดล้อมที่ปลอดภัยแล้ว ซึ่งรวมถึง VPC, VPC endpoints, security group, AWS Identity และการจัดการการเข้าถึง (IAM) บทบาทและ บริการจัดการคีย์ AWS คีย์ (AWS KMS) นอกจากนี้ เรายังถือว่าคุณมีสองที่เก็บข้อมูล: ที่หนึ่งสำหรับอาร์ติแฟกต์ เช่น รหัสและบันทึก และอีกที่หนึ่งสำหรับข้อมูลของคุณ เดอะ basic_infra.yaml ไฟล์แสดงตัวอย่าง การก่อตัวของ AWS Cloud รหัสเพื่อจัดเตรียมโครงสร้างพื้นฐานที่จำเป็นเบื้องต้นที่จำเป็น โค้ดตัวอย่างและคู่มือการปรับใช้ยังมีอยู่ใน GitHub.

ตัวอย่างเช่น เราตั้งค่าไปป์ไลน์ที่มีรายการเดียว ProcessingStep ซึ่งเราเพียงแค่อ่านและเขียน ชุดข้อมูลหอยเป๋าฮื้อ ใช้สปาร์ค ตัวอย่างโค้ดแสดงวิธีการตั้งค่าและกำหนดค่า ProcessingStep.

เรากำหนดพารามิเตอร์สำหรับไปป์ไลน์ (ชื่อ บทบาท ที่ฝากข้อมูล และอื่นๆ) และการตั้งค่าเฉพาะขั้นตอน (ประเภทและจำนวนอินสแตนซ์ เวอร์ชันเฟรมเวิร์ก และอื่นๆ) ในตัวอย่างนี้ เราใช้การตั้งค่าที่ปลอดภัย และยังกำหนดซับเน็ต กลุ่มความปลอดภัย และการเข้ารหัสการรับส่งข้อมูลระหว่างคอนเทนเนอร์ สำหรับตัวอย่างนี้ คุณต้องมีบทบาทการดำเนินการไปป์ไลน์ที่มีสิทธิ์เข้าถึงแบบเต็มของ SageMaker และ VPC ดูรหัสต่อไปนี้:

{ "pipeline_name": "ProcessingPipeline", "trial": "test-blog-post", "pipeline_role": "arn:aws:iam::<ACCOUNT_NUMBER>:role/<PIPELINE_EXECUTION_ROLE_NAME>", "network_subnet_ids": [ "subnet-<SUBNET_ID>", "subnet-<SUBNET_ID>" ], "network_security_group_ids": [ "sg-<SG_ID>" ], "pyspark_process_volume_kms": "arn:aws:kms:<REGION_NAME>:<ACCOUNT_NUMBER>:key/<KMS_KEY_ID>", "pyspark_process_output_kms": "arn:aws:kms:<REGION_NAME>:<ACCOUNT_NUMBER>:key/<KMS_KEY_ID>", "pyspark_helper_code": "s3://<INFRA_S3_BUCKET>/src/helper/data_utils.py", "spark_config_file": "s3://<INFRA_S3_BUCKET>/src/spark_configuration/configuration.json", "pyspark_process_code": "s3://<INFRA_S3_BUCKET>/src/processing/process_pyspark.py", "process_spark_ui_log_output": "s3://<DATA_S3_BUCKET>/spark_ui_logs/{}", "pyspark_framework_version": "2.4", "pyspark_process_name": "pyspark-processing", "pyspark_process_data_input": "s3a://<DATA_S3_BUCKET>/data_input/abalone_data.csv", "pyspark_process_data_output": "s3a://<DATA_S3_BUCKET>/pyspark/data_output", "pyspark_process_instance_type": "ml.m5.4xlarge", "pyspark_process_instance_count": 6, "tags": { "Project": "tag-for-project", "Owner": "tag-for-owner" }
}

เพื่อสาธิต ตัวอย่างโค้ดต่อไปนี้เรียกใช้สคริปต์ PySpark บน SageMaker Processing ภายในไปป์ไลน์โดยใช้ PySparkProcessor:

# import code requirements
# standard libraries import
import logging
import json # sagemaker model import
import sagemaker
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.pipeline_experiment_config import PipelineExperimentConfig
from sagemaker.workflow.steps import CacheConfig
from sagemaker.processing import ProcessingInput
from sagemaker.workflow.steps import ProcessingStep
from sagemaker.workflow.pipeline_context import PipelineSession
from sagemaker.spark.processing import PySparkProcessor from helpers.infra.networking.networking import get_network_configuration
from helpers.infra.tags.tags import get_tags_input
from helpers.pipeline_utils import get_pipeline_config def create_pipeline(pipeline_params, logger): """ Args: pipeline_params (ml_pipeline.params.pipeline_params.py.Params): pipeline parameters logger (logger): logger Returns: () """ # Create SageMaker Session sagemaker_session = PipelineSession() # Get Tags tags_input = get_tags_input(pipeline_params["tags"]) # get network configuration network_config = get_network_configuration( subnets=pipeline_params["network_subnet_ids"], security_group_ids=pipeline_params["network_security_group_ids"] ) # Get Pipeline Configurations pipeline_config = get_pipeline_config(pipeline_params) # setting processing cache obj logger.info("Setting " + pipeline_params["pyspark_process_name"] + " cache configuration 3 to 30 days") cache_config = CacheConfig(enable_caching=True, expire_after="p30d") # Create PySpark Processing Step logger.info("Creating " + pipeline_params["pyspark_process_name"] + " processor") # setting up spark processor processing_pyspark_processor = PySparkProcessor( base_job_name=pipeline_params["pyspark_process_name"], framework_version=pipeline_params["pyspark_framework_version"], role=pipeline_params["pipeline_role"], instance_count=pipeline_params["pyspark_process_instance_count"], instance_type=pipeline_params["pyspark_process_instance_type"], volume_kms_key=pipeline_params["pyspark_process_volume_kms"], output_kms_key=pipeline_params["pyspark_process_output_kms"], network_config=network_config, tags=tags_input, sagemaker_session=sagemaker_session ) # setting up arguments run_ags = processing_pyspark_processor.run( submit_app=pipeline_params["pyspark_process_code"], submit_py_files=[pipeline_params["pyspark_helper_code"]], arguments=[ # processing input arguments. To add new arguments to this list you need to provide two entrances: # 1st is the argument name preceded by "--" and the 2nd is the argument value # setting up processing arguments "--input_table", pipeline_params["pyspark_process_data_input"], "--output_table", pipeline_params["pyspark_process_data_output"] ], spark_event_logs_s3_uri=pipeline_params["process_spark_ui_log_output"].format(pipeline_params["trial"]), inputs = [ ProcessingInput( source=pipeline_params["spark_config_file"], destination="/opt/ml/processing/input/conf", s3_data_type="S3Prefix", s3_input_mode="File", s3_data_distribution_type="FullyReplicated", s3_compression_type="None" ) ], ) # create step pyspark_processing_step = ProcessingStep( name=pipeline_params["pyspark_process_name"], step_args=run_ags, cache_config=cache_config, ) # Create Pipeline pipeline = Pipeline( name=pipeline_params["pipeline_name"], steps=[ pyspark_processing_step ], pipeline_experiment_config=PipelineExperimentConfig( pipeline_params["pipeline_name"], pipeline_config["trial"] ), sagemaker_session=sagemaker_session ) pipeline.upsert( role_arn=pipeline_params["pipeline_role"], description="Example pipeline", tags=tags_input ) return pipeline def main(): # set up logging logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) logger.info("Get Pipeline Parameter") with open("ml_pipeline/params/pipeline_params.json", "r") as f: pipeline_params = json.load(f) print(pipeline_params) logger.info("Create Pipeline") pipeline = create_pipeline(pipeline_params, logger=logger) logger.info("Execute Pipeline") execution = pipeline.start() return execution if __name__ == "__main__": main()

ดังที่แสดงในโค้ดก่อนหน้า เรากำลังเขียนทับการกำหนดค่าเริ่มต้นของ Spark โดยระบุ configuration.json เป็น ProcessingInput. เราใช้ configuration.json ไฟล์ที่บันทึกไว้ใน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) ด้วยการตั้งค่าต่อไปนี้:

[ { "Classification":"spark-defaults", "Properties":{ "spark.executor.memory":"10g", "spark.executor.memoryOverhead":"5g", "spark.driver.memory":"10g", "spark.driver.memoryOverhead":"10g", "spark.driver.maxResultSize":"10g", "spark.executor.cores":5, "spark.executor.instances":5, "spark.yarn.maxAppAttempts":1 "spark.hadoop.fs.s3a.endpoint":"s3.<region>.amazonaws.com", "spark.sql.parquet.fs.optimized.comitter.optimization-enabled":true } }
]

เราสามารถอัปเดตการกำหนดค่าเริ่มต้นของ Spark ได้โดยการส่งไฟล์เป็น ProcessingInput หรือโดยใช้อาร์กิวเมนต์การกำหนดค่าเมื่อเรียกใช้ run() ฟังก์ชัน

การกำหนดค่า Spark ขึ้นอยู่กับตัวเลือกอื่นๆ เช่น ประเภทอินสแตนซ์และจำนวนอินสแตนซ์ที่เลือกสำหรับงานประมวลผล ข้อพิจารณาแรกคือจำนวนอินสแตนซ์ แกน vCPU ที่แต่ละอินสแตนซ์มี และหน่วยความจำอินสแตนซ์ คุณสามารถใช้ได้ Spark UI or เมตริกอินสแตนซ์ CloudWatch และบันทึกเพื่อปรับเทียบค่าเหล่านี้ในการรันซ้ำหลายครั้ง

นอกจากนี้ยังสามารถปรับแต่งการตั้งค่าตัวดำเนินการและไดรเวอร์ให้ดียิ่งขึ้นไปอีก สำหรับตัวอย่างการคำนวณ โปรดดูที่ แนวทางปฏิบัติที่ดีที่สุดในการจัดการหน่วยความจำสำหรับแอปพลิเคชัน Apache Spark บน Amazon EMR ให้สำเร็จ.

ถัดไป สำหรับการตั้งค่าไดรเวอร์และตัวดำเนินการ เราขอแนะนำให้ตรวจสอบการตั้งค่าตัวส่งเพื่อปรับปรุงประสิทธิภาพเมื่อเขียนไปยัง Amazon S3 ในกรณีของเรา เรากำลังเขียนไฟล์ Parquet ไปยัง Amazon S3 และตั้งค่า “spark.sql.parquet.fs.optimized.comitter.optimization-enabled” เป็นจริง

หากจำเป็นสำหรับการเชื่อมต่อกับ Amazon S3 ตำแหน่งข้อมูลระดับภูมิภาค “spark.hadoop.fs.s3a.endpoint” สามารถระบุได้ภายในไฟล์คอนฟิกูเรชัน

ในไปป์ไลน์ตัวอย่างนี้ สคริปต์ PySpark spark_process.py (ตามที่แสดงในโค้ดต่อไปนี้) โหลดไฟล์ CSV จาก Amazon S3 ลงในเฟรมข้อมูล Spark และบันทึกข้อมูลเป็น Parquet กลับไปที่ Amazon S3

โปรดทราบว่าการกำหนดค่าตัวอย่างของเราไม่ได้สัดส่วนกับปริมาณงาน เนื่องจากการอ่านและเขียนชุดข้อมูลหอยเป๋าฮื้อสามารถทำได้ในการตั้งค่าเริ่มต้นในอินสแตนซ์เดียว การกำหนดค่าที่เรากล่าวถึงควรกำหนดตามความต้องการเฉพาะของคุณ

# import requirements
import argparse
import logging
import sys
import os
import pandas as pd # spark imports
from pyspark.sql import SparkSession
from pyspark.sql.functions import (udf, col)
from pyspark.sql.types import StringType, StructField, StructType, FloatType from data_utils import( spark_read_parquet, Unbuffered
) sys.stdout = Unbuffered(sys.stdout) # Define custom handler
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter("%(asctime)s %(message)s"))
logger.addHandler(handler)
logger.setLevel(logging.INFO) def main(data_path): spark = SparkSession.builder.appName("PySparkJob").getOrCreate() spark.sparkContext.setLogLevel("ERROR") schema = StructType( [ StructField("sex", StringType(), True), StructField("length", FloatType(), True), StructField("diameter", FloatType(), True), StructField("height", FloatType(), True), StructField("whole_weight", FloatType(), True), StructField("shucked_weight", FloatType(), True), StructField("viscera_weight", FloatType(), True), StructField("rings", FloatType(), True), ] ) df = spark.read.csv(data_path, header=False, schema=schema) return df.select("sex", "length", "diameter", "rings") if __name__ == "__main__": logger.info(f"===============================================================") logger.info(f"================= Starting pyspark-processing =================") parser = argparse.ArgumentParser(description="app inputs") parser.add_argument("--input_table", type=str, help="path to the channel data") parser.add_argument("--output_table", type=str, help="path to the output data") args = parser.parse_args() df = main(args.input_table) logger.info("Writing transformed data") df.write.csv(os.path.join(args.output_table, "transformed.csv"), header=True, mode="overwrite") # save data df.coalesce(10).write.mode("overwrite").parquet(args.output_table) logger.info(f"================== Ending pyspark-processing ==================") logger.info(f"===============================================================")

หากต้องการดำดิ่งสู่การปรับงานการประมวลผล Spark ให้เหมาะสม คุณสามารถใช้บันทึกของ CloudWatch เช่นเดียวกับ Spark UI คุณสามารถสร้าง Spark UI ได้โดยการเรียกใช้งานการประมวลผลบนอินสแตนซ์โน้ตบุ๊ก SageMaker ท่านสามารถดู Spark UI สำหรับงานการประมวลผลที่ทำงานภายในไปป์ไลน์ by เรียกใช้เซิร์ฟเวอร์ประวัติ ภายในอินสแตนซ์โน้ตบุ๊ก SageMaker หากบันทึก Spark UI ถูกบันทึกภายในตำแหน่ง Amazon S3 เดียวกัน

ทำความสะอาด

หากคุณทำตามบทช่วยสอน แนวทางปฏิบัติที่ดีคือการลบทรัพยากรที่ไม่ใช้แล้วเพื่อหยุดการเรียกเก็บเงิน ตรวจสอบให้แน่ใจ ลบ CloudFormation stack ที่คุณใช้ในการสร้างทรัพยากรของคุณ การดำเนินการนี้จะลบสแต็กที่สร้างขึ้นรวมถึงทรัพยากรที่สร้างขึ้น

สรุป

ในโพสต์นี้ เราได้แสดงวิธีเรียกใช้งาน SageMaker Processing ที่ปลอดภัยโดยใช้ PySpark ภายใน SageMaker Pipelines เรายังสาธิตวิธีเพิ่มประสิทธิภาพ PySpark โดยใช้การกำหนดค่า Spark และตั้งค่างานการประมวลผลของคุณให้ทำงานในการกำหนดค่าเครือข่ายที่ปลอดภัย

ในขั้นตอนถัดไป ให้สำรวจวิธีทำให้วงจรชีวิตของโมเดลทั้งหมดเป็นแบบอัตโนมัติและทำอย่างไร ลูกค้าสร้างแพลตฟอร์ม MLOps ที่ปลอดภัยและปรับขนาดได้ โดยใช้บริการ SageMaker


เกี่ยวกับผู้เขียน

เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.มาเรน ซุยมันน์ เป็น Data Scientist ที่ บริการระดับมืออาชีพของ AWS. เธอทำงานร่วมกับลูกค้าในอุตสาหกรรมต่างๆ เพื่อเปิดเผยพลังของ AI/ML เพื่อบรรลุผลลัพธ์ทางธุรกิจ Maren อยู่กับ AWS ตั้งแต่เดือนพฤศจิกายน 2019 ในเวลาว่าง เธอชอบเล่นคิกบ็อกซิ่ง ปีนเขาเพื่อชมทิวทัศน์ที่สวยงาม และคืนที่เล่นเกมกระดาน


เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ไมร่า ลาเดร่า ทันเก้
เป็นผู้เชี่ยวชาญ ML ที่ AWS ด้วยพื้นฐานด้านวิทยาศาสตร์ข้อมูล เธอมีประสบการณ์ 9 ปีในการออกแบบสถาปัตยกรรมและสร้างแอปพลิเคชัน ML กับลูกค้าในอุตสาหกรรมต่างๆ ในฐานะผู้นำด้านเทคนิค เธอช่วยลูกค้าเร่งการบรรลุมูลค่าทางธุรกิจผ่านเทคโนโลยีที่เกิดขึ้นใหม่และโซลูชันที่เป็นนวัตกรรมใหม่ ในเวลาว่าง Maira ชอบท่องเที่ยวและใช้เวลากับครอบครัวในสถานที่อบอุ่น


เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.พอลลีน ติง
เป็นนักวิทยาศาสตร์ข้อมูลใน บริการระดับมืออาชีพของ AWS ทีม. เธอสนับสนุนลูกค้าในการบรรลุผลและเร่งผลลัพธ์ทางธุรกิจโดยการพัฒนาโซลูชัน AI/ML ในเวลาว่าง Pauline ชอบท่องเที่ยว เล่นเซิร์ฟ และลองร้านขนมใหม่ๆ


เรียกใช้งานการประมวลผลที่ปลอดภัยโดยใช้ PySpark ใน Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.โดนัลด์ ฟอสซูโอ
เป็น Sr Data Architect ใน บริการระดับมืออาชีพของ AWS ทีมงานส่วนใหญ่ทำงานกับ Global Finance Service เขามีส่วนร่วมกับลูกค้าเพื่อสร้างโซลูชันนวัตกรรมที่แก้ปัญหาธุรกิจของลูกค้าและเร่งการนำบริการของ AWS มาใช้ ในเวลาว่าง โดนัลด์ชอบอ่านหนังสือ วิ่ง และท่องเที่ยว

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS