مهندسی ویژگی در مقیاس بزرگ با محافظت از داده‌های حساس با استفاده از جلسات تعاملی AWS Glue و Amazon SageMaker Studio PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

مهندسی ویژگی در مقیاس بزرگ با محافظت از داده های حساس با استفاده از جلسات تعاملی AWS Glue و Amazon SageMaker Studio

سازمان‌ها از یادگیری ماشین (ML) و خدمات هوش مصنوعی برای بهبود تجربه مشتری، کاهش هزینه عملیاتی و باز کردن امکانات جدید برای بهبود نتایج کسب‌وکار استفاده می‌کنند. داده ها زیربنای موارد استفاده از ML و AI است و یک دارایی استراتژیک برای یک سازمان است. از آنجایی که داده ها با سرعتی تصاعدی در حال رشد هستند، سازمان ها به دنبال راه اندازی یک پلت فرم داده یکپارچه، مقرون به صرفه و کارآمد هستند تا بتوانند داده ها را پیش پردازش کنند، مهندسی ویژگی ها را انجام دهند و مدل های ML را در مقیاس بسازند، آموزش دهند و عملیاتی کنند. برای دستیابی به آن، AWS یک پلت فرم داده مدرن یکپارچه ارائه می دهد که توسط آن پشتیبانی می شود سرویس ذخیره سازی ساده آمازون (Amazon S3) به عنوان دریاچه داده با ابزارهای هدفمند و موتورهای پردازشی برای پشتیبانی از حجم کاری تحلیلی و ML. برای یک تجربه ML یکپارچه، می توانید استفاده کنید Amazon SageMaker Studio، ارائه می دهد ادغام بومی با جلسات تعاملی AWS Glue برای انجام مهندسی ویژگی در مقیاس با حفاظت از داده های حساس. در این پست نحوه پیاده سازی این راه حل را نشان می دهیم.

آمازون SageMaker یک سرویس ML کاملاً مدیریت شده است که شما را قادر می سازد تا مدل هایی را در مقیاس برای طیف گسترده ای از موارد استفاده کنید. برای آموزش مدل می توانید از هر کدام از آنها استفاده کنید الگوریتم های داخلی در SageMaker برای شروع آموزش و استقرار سریع مدل‌های ML.

یکی از اجزای کلیدی فرآیند ساخت و توسعه مدل، مهندسی ویژگی است. چسب AWS یکی از گزینه های پیشنهادی برای دستیابی به مهندسی ویژگی در مقیاس است. چسب AWS شما را قادر می سازد تا یکپارچه سازی و تبدیل داده ها را به صورت توزیع شده در زیرساخت بدون سرور آپاچی Spark اجرا کنید و استفاده از کتابخانه محبوب Spark ML را برای مهندسی ویژگی و توسعه مدل آسان می کند. علاوه بر این، می‌توانید از چسب AWS برای پردازش اطلاعات افزایشی استفاده کنید نشانک های شغلی، داده ها را از بیش از 100 منبع با استفاده از اتصال دهنده ها، و با استفاده از بارهای کاری پراکنده یا غیرقابل پیش بینی اجرا کنید مقیاس بندی خودکار.

یکی دیگر از نیازهای مهم برای برنامه های کاربردی مبتنی بر ML، امنیت داده ها و کنترل دسترسی است. این یک تقاضای رایج است که با پیروی از اصول حداقل دسترسی، کنترل دقیق‌تری بر روی افرادی که می‌توانند به حساس‌ترین داده‌ها به عنوان بخشی از فرآیند مهندسی ویژگی و ساخت مدل دسترسی داشته باشند، داشته باشیم. برای رسیدن به این هدف، می توانید از ادغام AWS Glue با استفاده کنید سازند دریاچه AWS برای افزایش حکمرانی و مدیریت دارایی‌های دریاچه داده. با Lake Formation، می‌توانید کنترل دسترسی به داده‌ها و سیاست‌های امنیتی دقیق را در بالای دریاچه داده Amazon S3 خود پیکربندی کنید. خط‌مشی‌ها در یک مکان مرکزی تعریف می‌شوند و به چندین سرویس تجزیه و تحلیل و ML اجازه می‌دهند، مانند چسب AWS، آمازون آتناو SageMaker، برای تعامل با داده های ذخیره شده در Amazon S3.

چسب AWS شامل یک شناسایی اطلاعات شخصی (PII) تبدیلی که توانایی شناسایی، پوشاندن یا حذف موجودیت ها را در صورت لزوم برای افزایش انطباق و حاکمیت فراهم می کند. با تبدیل PII، می‌توانید داده‌های PII را در مجموعه‌های داده شناسایی کنید و به طور خودکار کنترل دسترسی ریزدانه را با استفاده از Lake Formation اعمال کنید تا داده‌های حساس را برای گروه‌های مختلف کاربر محدود کنید.

مورد استفاده

ما بر روی یک مورد استفاده از مدل تمایل تمرکز می کنیم که شامل مجموعه داده بازاریابی مشتری است و شامل دو شخصیت کاربر است: یک مهندس داده و دانشمند داده. مجموعه داده شامل اطلاعات هر مشتری، از جمله منبع سرنخ، یادداشت‌های تماس، نقش شغلی، برخی از پرچم‌ها، بازدید از صفحه در هر بازدید و غیره است. مجموعه داده همچنین شامل اطلاعات حساس مانند شماره تلفن های شخصی است.

مهندس داده مسئول ساخت خط لوله پردازش داده ها از جمله آماده سازی داده ها، پیش پردازش و کنترل دسترسی است. دانشمند داده مسئول مهندسی ویژگی ها و آموزش و استقرار مدل ML است. توجه داشته باشید که دانشمند داده مجاز به دسترسی به داده های حساس PII برای مهندسی ویژگی یا آموزش مدل ML نیست.

به عنوان بخشی از این مورد استفاده، مهندس داده یک خط لوله داده برای پیش پردازش مجموعه داده ایجاد می کند، مجموعه داده را برای هر گونه اطلاعات PII اسکن می کند و دسترسی به ستون PII را برای کاربر دانشمند داده محدود می کند. در نتیجه، وقتی یک دانشمند داده از مجموعه داده برای انجام مهندسی ویژگی و ساخت مدل‌های ML استفاده می‌کند، به ستون حساس PII (در این مورد شماره تلفن) دسترسی ندارد. فرآیند مهندسی ویژگی شامل تبدیل ستون هایی از نوع رشته به فرمتی است که برای مدل های ML بهینه است. به عنوان یک مورد استفاده پیشرفته، می توانید این الگوی دسترسی را برای پیاده سازی امنیت در سطح ردیف و سطح سلول با استفاده از Lake Formation گسترش دهید.

بررسی اجمالی راه حل

راه حل شامل مراحل سطح بالا زیر است:

  1. راه اندازی منابع با AWS CloudFormation.
  2. پیش پردازش مجموعه داده، از جمله تشخیص PII و کنترل دسترسی دقیق، در یک جلسه تعاملی AWS Glue.
  3. مهندسی ویژگی را در جلسه تعاملی AWS Glue انجام دهید.
  4. با استفاده از الگوریتم XGBoost داخلی SageMaker، یک مدل ML را آموزش و استقرار دهید.
  5. مدل ML را ارزیابی کنید.

نمودار زیر معماری راه حل را نشان می دهد.

پیش نیازها

برای تکمیل این آموزش، باید پیش نیازهای زیر را داشته باشید:

منابع را با AWS CloudFormation تنظیم کنید

این پست شامل یک الگوی CloudFormation برای راه اندازی سریع است. شما می توانید آن را مطابق با نیاز خود بررسی و سفارشی کنید. اگر ترجیح می دهید منابع را بر روی آن تنظیم کنید کنسول مدیریت AWS و AWS CLI به جای AWS CloudFormation، دستورالعمل‌های پیوست را در انتهای این پست ببینید.

قالب CloudFormation منابع زیر را تولید می کند:

  • سطل های S3 با مجموعه داده نمونه
  • An AWS لامبدا تابع برای بارگذاری مجموعه داده
  • هویت AWS و مدیریت دسترسی گروه (IAM)، کاربران، نقش‌ها و خط‌مشی‌ها
  • تنظیمات و مجوزهای دریاچه داده‌های Lake Formation
  • پروفایل های کاربر SageMaker

برای ایجاد منابع خود، مراحل زیر را انجام دهید:

  1. وارد کنسول شوید.
  2. را انتخاب کنید Stack را راه اندازی کنید:
    دکمه راه اندازی
  3. را انتخاب کنید بعدی.
  4. برای DataEngineerPwd و DataScientistPwd، رمز عبور خود را برای کاربران مهندس داده و دانشمند داده وارد کنید.
  5. برای GlueDatabaseName، وارد demo.
  6. برای GlueTableName، وارد web_marketing.
  7. برای S3BucketNameForInput، وارد blog-studio-pii-dataset-.
  8. برای S3BucketNameForOutput، وارد blog-studio-output-.
  9. برای SageMakerDomainId، شناسه دامنه SageMaker خود را که در مراحل پیش نیاز آماده کرده اید وارد کنید.
  10. را انتخاب کنید بعدی.
  11. در صفحه بعد انتخاب کنید بعدی.
  12. جزئیات صفحه آخر را بررسی کرده و انتخاب کنید من تصدیق می کنم که AWS CloudFormation ممکن است منابع IAM را ایجاد کند.
  13. را انتخاب کنید ساختن.

ایجاد پشته می تواند تا 10 دقیقه طول بکشد. پشته نقش های IAM و پروفایل های کاربری SageMaker را برای دو شخصیت ایجاد می کند: مهندس داده و دانشمند داده. همچنین یک نسخه نمایشی و جدول پایگاه داده ایجاد می کند web_marketing با یک مجموعه داده نمونه

در زمان ایجاد پشته، پرسونای مهندس داده دسترسی کامل به جدول دارد، اما پرسونای دانشمند داده هنوز به جدول دسترسی ندارد.

مجموعه داده را از قبل پردازش کنید

بیایید پیش پردازش داده ها را در یک جلسه تعاملی AWS Glue شروع کنیم. شخصیت مهندس داده می‌خواهد داده‌ها را تأیید کند تا ببیند داده‌های حساسی وجود دارد یا خیر، و حداقل مجوز دسترسی را به شخصیت دانشمند داده اعطا کند. می توانید نوت بوک را از این مکان.

  1. با استفاده از کاربر مهندسی داده وارد کنسول شوید.
  2. در کنسول SageMaker، را انتخاب کنید کاربران.
  3. کاربر مهندس داده را انتخاب کنید و انتخاب کنید استودیو باز.
  4. یک نوت بوک جدید بسازید و انتخاب کنید SparkAnalytics 1.0 برای تصویر و چسب PySpark برای هسته.
  5. برای نصب نسخه جدیدتر Boto3 یک جلسه تعاملی با جادوی زیر شروع کنید (این برای استفاده از create_data_cells_filter روش):
    %additional_python_modules boto3==1.24.82

  6. شروع جلسه:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)

  7. از جدول جدید ایجاد شده یک AWS Glue DynamicFrame ایجاد کنید و حل انواع انتخاب بر اساس طرح کاتالوگ، زیرا می خواهیم از طرحی که در کاتالوگ تعریف شده است، به جای طرحواره استنتاج خودکار بر اساس داده ها استفاده کنیم:
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved = dyf_marketing.resolveChoice(
    choice="match_catalog",
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved.printSchema()

  8. در جدول اعتبار سنجی کنید که آیا داده های PII با استفاده از تشخیص PII چسب AWS وجود دارد یا خیر:
    from awsglueml.transforms import EntityDetector
    
    entities_filter = [
    "EMAIL",
    "CREDIT_CARD",
    "IP_ADDRESS",
    "MAC_ADDRESS",
    "PHONE_NUMBER"
    ]
    entity_detector = EntityDetector()
    classified_map = entity_detector.classify_columns(dyf_marketing_resolved, entities_filter, 1.0, 0.1)
    print(classified_map)

  9. بررسی کنید که آیا ستون‌های طبقه‌بندی‌شده به عنوان PII حاوی داده‌های حساس هستند یا نه (اگر نه، classified_map را به‌روزرسانی کنید تا ستون‌های غیر حساس حذف شوند):
    from pyspark.sql.functions import col
    dyf_marketing_resolved.toDF().select(*[col(c) for c in classified_map.keys()]).show()

  10. مجوزهای Lake Formation را با استفاده از فیلتر سلول داده برای ستون های شناسایی شده خودکار تنظیم کنید و ستون ها را به شخصیت دانشمند داده محدود کنید:
    lakeformation = boto3.client('lakeformation')
    sts = boto3.client('sts')
    
    account_id = sts.get_caller_identity().get('Account')
    
    # Create a data cell filter for excluding phone_number column
    lakeformation.create_data_cells_filter(
    TableData={
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii',
    'RowFilter': {
    'AllRowsWildcard': {}
    
    },
    'ColumnWildcard': {
    'ExcludedColumnNames': list(classified_map.keys())
    }
    }
    )
    
    # Grant permission on the data cell filter
    lakeformation.grant_permissions(
    Principal={
    'DataLakePrincipalIdentifier': f'arn:aws:iam::{account_id}:role/SageMakerStudioExecutionRole_data-scientist'
    },
    Resource={
    'DataCellsFilter': {
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii'
    }
    },
    Permissions=[
    'SELECT'
    ]
    )

  11. به عنوان دانشمند داده وارد استودیو شوید تا ببینید که ستون های PII قابل مشاهده نیستند. می توانید نوت بوک را از این مکان.
  12. یک نوت بوک جدید بسازید و انتخاب کنید SparkAnalytics 1.0 برای تصویر و چسب PySpark برای هسته:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing.printSchema()

مهندسی ویژگی را انجام دهید

ما از کتابخانه Apache Spark ML برای انجام مهندسی ویژگی به عنوان کاربر دانشمند داده استفاده می کنیم و سپس خروجی را در Amazon S3 بازنویسی می کنیم.

  1. در سلول زیر، ویژگی هایی را از the اعمال می کنیم کتابخانه Apache Spark ML:
    • StringIndexer یک ستون رشته ای از برچسب ها را به ستونی از فهرست های برچسب نگاشت می کند.
    • OneHotEncoder یک ویژگی طبقه‌بندی را که به‌عنوان یک شاخص برچسب نشان داده می‌شود، به یک بردار باینری با حداکثر یک مقدار منفرد نگاشت می‌کند که نشان‌دهنده وجود یک ویژگی طبقه‌بندی خاص است. این تبدیل برای الگوریتم های ML استفاده می شود که انتظار ویژگی های پیوسته را دارند.
    • VectorAssembler یک ترانسفورماتور است که لیست معینی از ستون‌ها را در یک ستون بردار ترکیب می‌کند، که سپس در آموزش مدل‌های ML برای الگوریتم‌هایی مانند رگرسیون لجستیک و درخت‌های تصمیم استفاده می‌شود.
    #feature engineering by using string indexer and one hot encoding from spark ML library
    from pyspark.ml.feature import StringIndexer, VectorIndexer, OneHotEncoder, VectorAssembler
    from pyspark.ml import Pipeline
    
    cols = ['lastcampaignactivity','region','viewedadvertisement','usedpromo','jobrole']
    
    int_cols = ['pageviewspervisit','totaltimeonwebsite','totalwebvisits',]
    
    indexers = [
    StringIndexer(inputCol=c, outputCol="{0}_indexed".format(c))
    for c in cols
    ]
    
    encoders = [
    OneHotEncoder(
    inputCol=indexer.getOutputCol(),
    outputCol="{0}_encoded".format(indexer.getOutputCol()))
    for indexer in indexers
    ]
    
    assembler = VectorAssembler(
    inputCols=[encoder.getOutputCol() for encoder in encoders]+int_cols,
    outputCol="features"
    )

  2. DataFrame نهایی تبدیل شده را می توان با استفاده از کتابخانه Pipeline ایجاد کرد. خط لوله به عنوان دنباله ای از مراحل مشخص می شود. این مراحل به ترتیب اجرا می شوند و DataFrame ورودی با عبور از هر مرحله تبدیل می شود.
    df_marketing = dyf_marketing.toDF()
    pipeline = Pipeline(stages=indexers + encoders + [assembler])
    df_tfm=pipeline.fit(df_marketing).transform(df_marketing)
    

  3. سپس، مجموعه داده را به Train تقسیم می‌کنیم، DataFrame را اعتبارسنجی و آزمایش می‌کنیم و آن را در سطل S3 ذخیره می‌کنیم تا مدل ML را آموزش دهیم (شناسه حساب AWS خود را در کد زیر ارائه کنید):
    from pyspark.ml.functions import vector_to_array
    
    #set s3 output location for feature engineering output
    bucket='blog-studio-output-'
    
    #convert sparse to dense vector
    df_tfm=df_tfm.select('converted',vector_to_array("features").alias("features_array"))
    
    #split features array into individual columns
    df_tfm=df_tfm.select([df_tfm.converted] + [df_tfm.features_array[i] for i in range(17)])
    
    #split the overall dataset into 70-20-10 training , validation and test
    (train_df, validation_df, test_df) = df_tfm.randomSplit([0.7,0.2,0.1])
    
    #write back train, validation and test datasets to S3
    train_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/training/'.format(bucket))
    
    validation_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/validation/'.format(bucket))
    
    test_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/test/'.format(bucket))

آموزش و استقرار یک مدل ML

در بخش قبل، مهندسی ویژگی را تکمیل کردیم که شامل تبدیل ستون های رشته ای مانند region, jobroleو usedpromo به فرمتی که برای مدل های ML بهینه است. ما همچنین ستون هایی مانند pageviewspervisit و totalwebvisits، که به ما در پیش بینی تمایل مشتری به خرید یک محصول کمک می کند.

ما اکنون یک مدل ML را با خواندن مجموعه داده های قطار و اعتبارسنجی با استفاده از الگوریتم XGBoost داخلی SageMaker آموزش می دهیم. سپس مدل را مستقر کرده و یک بررسی دقت اجرا می کنیم. می توانید نوت بوک را از این مکان.

در سلول زیر، داده‌های سطل دوم S3 را می‌خوانیم که شامل خروجی عملیات مهندسی ویژگی‌های ما است. سپس از الگوریتم داخلی XGBoost برای آموزش مدل استفاده می کنیم.

  1. یک نوت بوک جدید باز کنید. انتخاب کنید علم اطلاعات برای تصویر و پایتون 3 برای هسته (شناسه حساب AWS خود را در کد زیر وارد کنید):
    #set s3 bucket location for training data
    import sagemaker
    import boto3
    from sagemaker import get_execution_role
    
    container = sagemaker.image_uris.retrieve(region=boto3.Session().region_name,
    framework='xgboost', version='latest')
    bucket='blog-studio-output-'
    prefix='web-marketing/processed'
    
    #read train and validation input datasets
    s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/training/'
    .format(bucket, prefix), content_type='csv')
    s3_input_validation = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/validation/'
    .format(bucket, prefix), content_type='csv')
    
    #train xgb model
    sess = sagemaker.Session()
    from sagemaker import get_execution_role
    
    xgb = sagemaker.estimator.Estimator(
    container,
    role=get_execution_role(),
    instance_count=1,
    instance_type='ml.m4.xlarge',
    output_path='s3://{}/{}/output'
    .format(bucket, prefix),
    sagemaker_session=sess
    )
    
    xgb.set_hyperparameters(
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.8,
    silent=0,
    objective='binary:logistic',
    num_round=100
    )
    
    xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})

  2. وقتی آموزش کامل شد، می‌توانیم مدل را با استفاده از خدمات میزبانی SageMaker اجرا کنیم:
    #deploy ml model
    xgb_predictor = xgb.deploy(initial_instance_count=1,
    instance_type='ml.m4.xlarge')

مدل ML را ارزیابی کنید

ما از مجموعه داده آزمایشی برای ارزیابی مدل استفاده می‌کنیم و پس از اتمام کار، نقطه پایان استنتاج را حذف می‌کنیم تا از هزینه‌های مداوم جلوگیری کنیم.

  1. مدل را با کد زیر ارزیابی کنید:
    #create csv serialiser to run accuracy on test dataset
    xgb_predictor.serializer = sagemaker.serializers.CSVSerializer()
    
    #read test dataset
    import io
    import pandas as pd
    
    s3 = boto3.resource('s3')
    bucket_obj = s3.Bucket(bucket)
    
    test_line = []
    test_objs = bucket_obj.objects.filter(Prefix="web-marketing/processed/test")
    for obj in test_objs:
    try:
    key = obj.key
    body = obj.get()['Body'].read()
    temp = pd.read_csv(io.BytesIO(body),header=None, encoding='utf8',sep=',')
    test_line.append(temp)
    except:
    continue
    
    test_df = pd.concat(test_line)
    
    #predict results using deployed model
    import numpy as np
    def predict(data, predictor, rows=500 ):
    split_array = np.array_split(data, int(data.shape[0] / float(rows) + 1))
    predictions = ''
    for array in split_array:
    predictions = ','.join([predictions, predictor.predict(array).decode('utf-8')])
    return np.fromstring(predictions[1:], sep=',')
    
    #drop the target variable in test_df and make prediction
    predictions = predict(test_df.drop(test_df.columns[0], axis=1).to_numpy(), xgb_predictor)
    
    #calculate accuracy using sklearn library
    from sklearn.metrics import accuracy_score, confusion_matrix
    y_pred=np.round(predictions)
    y_true=test_df.iloc[:,0].values.tolist()
    print('Accuracy score: ',accuracy_score(y_true, y_pred))
    print('Confusion matrix: n',confusion_matrix(y_true, y_pred))

    نتیجه دقت برای اجرای نمونه 84.6٪ بود. به دلیل تقسیم تصادفی مجموعه داده، این ممکن است برای اجرای شما کمی متفاوت باشد.

  2. می توانیم نقطه پایانی استنتاج را با کد زیر حذف کنیم:
    xgb_predictor.delete_endpoint(delete_endpoint_config=True)

پاک کردن

اکنون به مرحله نهایی، پاکسازی منابع می رویم.

  1. دو سطل ایجاد شده از طریق پشته CloudFormation را خالی کنید.
  2. برنامه های مرتبط با کاربر را حذف کنید profiles data-scientist و data-engineer در استودیو
  3. پشته CloudFormation را حذف کنید.

نتیجه

در این پست، راه حلی را نشان دادیم که به اشخاصی مانند مهندسان داده و دانشمندان داده امکان می دهد مهندسی ویژگی را در مقیاس انجام دهند. با جلسات تعاملی AWS Glue، می‌توانید با تشخیص خودکار PII و کنترل دسترسی دقیق و بدون نیاز به مدیریت زیرساخت‌های اساسی، به راحتی به مهندسی ویژگی‌ها در مقیاس دست یابید. با استفاده از Studio به‌عنوان نقطه ورودی واحد، می‌توانید یک تجربه ساده و یکپارچه برای ایجاد یک گردش کار ML سرتاسر به دست آورید: از آماده‌سازی و ایمن کردن داده‌ها تا ساخت، آموزش، تنظیم، و استقرار مدل‌های ML. برای کسب اطلاعات بیشتر، مراجعه کنید شروع به کار با جلسات تعاملی AWS Glue و Amazon SageMaker Studio.

ما در مورد این قابلیت جدید بسیار هیجان‌زده هستیم و مشتاقیم ببینیم که شما با آن چه خواهید ساخت!


پیوست: منابع را از طریق کنسول و AWS CLI تنظیم کنید

دستورالعمل های این بخش را تکمیل کنید تا منابع را با استفاده از کنسول و AWS CLI به جای الگوی CloudFormation تنظیم کنید.

پیش نیازها

برای تکمیل این آموزش، باید به AWS CLI دسترسی داشته باشید (نگاه کنید به شروع کار با AWS CLI) یا از دسترسی خط فرمان استفاده کنید AWS CloudShell.

گروه IAM، کاربران، نقش‌ها و خط‌مشی‌ها را پیکربندی کنید

در این بخش، دو کاربر IAM ایجاد می کنیم: data-engineer و data-scientist که متعلق به گروه داده-پلتفرم-گروه IAM هستند. سپس یک خط مشی واحد IAM را به گروه IAM اضافه می کنیم.

  1. در کنسول IAM، یک خط مشی در برگه JSON ایجاد کنید برای ایجاد یک سیاست مدیریت شده جدید IAM به نام DataPlatformGroupPolicy. این خط‌مشی به کاربران گروه اجازه می‌دهد به Studio دسترسی داشته باشند، اما فقط با استفاده از نمایه کاربر SageMaker با برچسبی که با نام کاربری IAM آنها مطابقت دارد. از سند خط مشی JSON زیر برای ارائه مجوز استفاده کنید:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Condition":{
                "StringEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedUserProfile"
          },
          {
             "Condition":{
                "StringNotEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"AmazonSageMakerDeniedUserProfiles"
          }
       ]
    }

  2. یک گروه IAM ایجاد کنید نام data-platform-group.
  3. خط مشی مدیریت شده AWS با نام DataPlatformGroupPolicy را جستجو و به گروه پیوست کنید.
  4. کاربران IAM را ایجاد کنید به نام مهندس داده و دانشمند داده تحت گروه پلتفرم داده گروه IAM.
  5. یک خط مشی مدیریت شده جدید ایجاد کنید با نام SageMakerExecutionPolicy (شناسه منطقه و حساب خود را در کد زیر وارد کنید):
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Action":[
                "sagemaker:CreateTrainingJob",
                "sagemaker:DescribeTrainingJob",
                "logs:DescribeLogStreams",
                "sagemaker:CreateModel",
                "sagemaker:CreateEndpointConfig",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:DeleteEndpointConfig",
                "sagemaker:DeleteEndpoint"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerTrainingAndDeploy"
          },
          {
             "Action":"sagemaker:*App",
             "Resource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedApp"
          },
          {
             "Action":"sagemaker:*App",
             "Effect":"Deny",
             "NotResource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Sid":"AmazonSageMakerDeniedApps"
          },
          {
             "Action":[
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartition",
                "glue:GetPartitions"
             ],
             "Resource":[
                "arn:aws:glue:::table/demo/*",
                "arn:aws:glue:::database/demo",
                "arn:aws:glue:::catalog"
             ],
             "Effect":"Allow",
             "Sid":"GlueCatalogPermissions"
          },
          {
             "Action":[
                "lakeformation:GetDataAccess",
                "lakeformation:StartQueryPlanning",
                "lakeformation:GetQueryState",
                "lakeformation:GetWorkUnits",
                "lakeformation:GetWorkUnitResults"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"LakeFormationPermissions"
          },
          {
             "Effect":"Allow",
             "Action":[
                "s3:CreateBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:DeleteObject"
             ],
             "Resource":[
                "arn:aws:s3:::blog-studio-output-",
                "arn:aws:s3:::blog-studio-output-/*"
             ]
          },
          {
             "Action":[
                "iam:PassRole",
                "iam:GetRole",
                "sts:GetCallerIdentity"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioIAMPassRole"
          },
          {
             "Action":"sts:AssumeRole",
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"DenyAssummingOtherIAMRoles"
          }
       ]
    }

  6. یک خط مشی مدیریت شده جدید ایجاد کنید تحت عنوان SageMakerAdminPolicy:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "lakeformation:GrantPermissions",
                "lakeformation:RevokePermissions",
                "lakeformation:ListPermissions",
                "lakeformation:BatchGrantPermissions",
                "lakeformation:BatchRevokePermissions",
                "lakeformation:CreateDataCellsFilter",
                "lakeformation:DeleteDataCellsFilter",
                "lakeformation:ListDataCellsFilter",
                "glue:GetUserDefinedFunctions",
                "glue:BatchGetCustomEntityTypes"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"GlueLakeFormationPermissions"
          }
       ]
    }

  7. یک نقش IAM ایجاد کنید برای SageMaker برای مهندس داده (مهندس داده)، که به عنوان نقش اجرایی پروفایل کاربر مربوطه استفاده می شود. در خط مشی مجوزها را پیوست کنید صفحه، AmazonSageMakerFullAccess (خط مشی مدیریت شده AWS) به طور پیش فرض پیوست شده است. برای حفظ حداقل امتیاز، بعداً این خط‌مشی را حذف می‌کنید.
    1. برای نام نقش، از قرارداد نامگذاری معرفی شده در ابتدای این بخش برای نامگذاری نقش SageMakerStudioExecutionRole_data-engineer استفاده کنید.
    2. برای گزينه ها، نام پروفایل کاربری کلیدی و مقدار داده-مهندس را اضافه کنید.
    3. را انتخاب کنید نقش ایجاد کنید.
    4. برای افزودن خط مشی های باقی مانده، در نقش صفحه، نام نقشی را که ایجاد کردید انتخاب کنید.
    5. تحت ویرایش، سیاست AmazonSageMakerFullAccess را حذف کنید.
    6. بر خط مشی مجوزها را پیوست کنید در صفحه، خط‌مشی مدیریت‌شده AWS AwsGlueSessionUserRestrictedServiceRole و خط‌مشی‌های مدیریت شده توسط مشتری SageMakerExecutionPolicy و SageMakerAdminPolicy را که ایجاد کردید انتخاب کنید.
    7. را انتخاب کنید خط مشی ها را ضمیمه کنید.
    8. تغییر دادن رابطه اعتماد نقش شما:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

  8. یک نقش IAM ایجاد کنید برای SageMaker برای دانشمند داده (دانشمند داده)، که به عنوان نقش اجرایی پروفایل کاربر مربوطه استفاده می شود.
    1. برای نام نقش، نقش SageMakerStudioExecutionRole_data-scientist را نام ببرید.
    2. برای گزينه ها، نام پروفایل کاربری کلیدی و value data-scientist را اضافه کنید.
    3. را انتخاب کنید نقش ایجاد کنید.
    4. برای افزودن خط مشی های باقی مانده، در نقش صفحه، نام نقشی را که ایجاد کردید انتخاب کنید.
    5. تحت ویرایش، سیاست AmazonSageMakerFullAccess را حذف کنید.
    6. بر خط مشی مجوزها را پیوست کنید صفحه، خط مشی مدیریت شده AWS AwsGlueSessionUserRestrictedServiceRole و خط مشی مدیریت شده توسط مشتری SageMakerExecutionPolicy را که ایجاد کردید انتخاب کنید.
    7. را انتخاب کنید خط مشی ها را ضمیمه کنید.
    8. تغییر دادن رابطه اعتماد نقش شما:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

پروفایل های کاربر SageMaker را پیکربندی کنید

برای ایجاد پروفایل های کاربری SageMaker خود با studiouserid تگ کنید، مراحل زیر را انجام دهید:

  1. از AWS CLI یا CloudShell برای ایجاد نمایه کاربری استودیو برای مهندس داده استفاده کنید (شناسه حساب و شناسه دامنه استودیو خود را در کد زیر وارد کنید):
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-engineer --tags Key=studiouserid,Value=data-engineer --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-engineer

  2. مرحله ایجاد نمایه کاربری برای دانشمند داده و جایگزینی شناسه حساب و شناسه دامنه استودیو را تکرار کنید:
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-scientist --tags Key=studiouserid,Value=data-scientist --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-scientist

سطل های S3 ایجاد کنید و مجموعه داده نمونه را آپلود کنید

در این قسمت شما دو سطل S3 ایجاد می کنید. سطل اول یک مجموعه داده نمونه مربوط به بازاریابی وب دارد. سطل دوم توسط دانشمند داده برای ذخیره خروجی از وظایف مهندسی ویژگی استفاده می شود و این مجموعه داده خروجی برای آموزش مدل ML استفاده می شود.

ابتدا سطل S3 را برای داده های ورودی ایجاد کنید:

  1. دانلود مجموعه داده.
  2. در کنسول آمازون S3، را انتخاب کنید سطل در صفحه ناوبری
  3. را انتخاب کنید سطل ایجاد کنید.
  4. برای منطقه، منطقه ای را با دامنه SageMaker انتخاب کنید که شامل نمایه های کاربری است که ایجاد کرده اید.
  5. برای نام سطل، وارد blog-studio-pii-dataset-.
  6. را انتخاب کنید سطل ایجاد کنید.
  7. سطلی که ایجاد کردید را انتخاب کنید و انتخاب کنید بارگذاری.
  8. در فایل را انتخاب کنید بخش، را انتخاب کنید اضافه کردن فایل و مجموعه داده ای را که دانلود کرده اید آپلود کنید.
    اکنون سطلی برای داده های خروجی ایجاد می کنید:
  9. بر سطل صفحه ، انتخاب کنید سطل ایجاد کنید.
  10. برای منطقه، منطقه ای را با دامنه SageMaker انتخاب کنید که شامل نمایه های کاربری است که ایجاد کرده اید.
  11. برای نام سطل، وارد blog-studio-output-.
  12. را انتخاب کنید سطل ایجاد کنید.

یک پایگاه داده و جدول AWS Glue ایجاد کنید

در این بخش، یک پایگاه داده و جدول AWS Glue برای مجموعه داده ایجاد می کنید.

  1. در کنسول Lake Formation، زیر کاتالوگ داده در قسمت ناوبری، را انتخاب کنید پایگاه داده ها.
  2. را انتخاب کنید افزودن پایگاه داده.
  3. برای نام، دمو را وارد کنید.
  4. را انتخاب کنید پایگاه داده ایجاد کنید.
  5. تحت کاتالوگ داده، انتخاب کنید جداول.
  6. برای نام، وارد web_marketing.
  7. برای پایگاه داده، انتخاب کنید demo.
  8. برای شامل مسیر، مسیر سطل S3 خود را برای داده های ورودی وارد کنید.
  9. برای طبقه بندی، انتخاب کنید CSV.
  10. تحت طرح، انتخاب کنید آپلود طرحواره.
  11. آرایه JSON زیر را در کادر متن وارد کنید:
    [
       {
          "Name":"lastcampaignactivity",
          "Type":"string"
       },
       {
          "Name":"pageviewspervisit",
          "Type":"double"
       },
       {
          "Name":"totaltimeonwebsite",
          "Type":"bigint"
       },
       {
          "Name":"totalwebvisits",
          "Type":"bigint"
       },
       {
          "Name":"attendedmarketingevent",
          "Type":"string"
       },
       {
          "Name":"organicsearch",
          "Type":"string"
       },
       {
          "Name":"viewedadvertisement",
          "Type":"string"
       },
       {
          "Name":"leadsource",
          "Type":"string"
       },
       {
          "Name":"jobrole",
          "Type":"string"
       },
       {
          "Name":"contactnotes",
          "Type":"string"
       },
       {
          "Name":"leadprofile",
          "Type":"string"
       },
       {
          "Name":"usedpromo",
          "Type":"string"
       },
       {
          "Name":"donotreachout",
          "Type":"boolean"
       },
       {
          "Name":"city",
          "Type":"string"
       },
       {
          "Name":"converted",
          "Type":"bigint"
       },
       {
          "Name":"region",
          "Type":"string"
       },
       {
          "Name":"phone_number",
          "Type":"string"
       }
    ]

  12. را انتخاب کنید بارگذاری.
  13. را انتخاب کنید ارسال.
  14. تحت جزئیات جدول، انتخاب کنید ویرایش جدول.
  15. تحت خواص جدول، انتخاب کنید اضافه کردن.
  16. برای کلید، وارد skip.header.line.count، و برای ارزش، 1 را وارد کنید.
  17. را انتخاب کنید ذخیره.

مجوزهای Lake Formation را پیکربندی کنید

در این بخش، مجوزهای Lake Formation را تنظیم می کنید تا به نقش IAM اجازه دهید SageMakerStudioExecutionRole_data-engineer برای ایجاد یک پایگاه داده و ثبت مکان S3 در Lake Formation.

ابتدا، مکان دریاچه داده را برای مدیریت جداول زیر مکان در مجوزهای Lake Formation ثبت کنید:

  1. را انتخاب کنید مکان های دریاچه داده.
  2. را انتخاب کنید ثبت مکان.
  3. برای مسیر آمازون S3، وارد s3://blog-studio-pii-dataset-/ (سطلی که شامل مجموعه داده است).
  4. را انتخاب کنید ثبت مکان.
    اکنون به نقش های IAM مجوز پایگاه داده و جدول Lake Formation را می دهید SageMakerStudioExecutionRole_data-engineer و SageMakerStudioExecutionRole_data-scientistاول، اجازه پایگاه داده برای SageMakerStudioExecutionRole_data-engineer:
  5. تحت ویرایش، انتخاب کنید مجوزهای دریاچه داده.
  6. تحت مجوز داده، انتخاب کنید گرانت.
  7. برای اصولگرایان، انتخاب کنید کاربران و نقش های IAMو نقش را انتخاب کنید SageMakerStudioExecutionRole_data-engineer.
  8. برای برچسب های خط مشی یا منابع کاتالوگ، انتخاب کنید منابع کاتالوگ داده نامگذاری شده.
  9. برای پایگاه داده ها، نسخه ی نمایشی را انتخاب کنید.
  10. برای مجوزهای پایگاه داده، را انتخاب کنید فوق العاده.
  11. را انتخاب کنید گرانت.
    در مرحله بعد، مجوز جدول را برای SageMakerStudioExecutionRole_data-engineer:
  12. تحت مجوز داده، انتخاب کنید گرانت.
  13. برای اصولگرایان، انتخاب کنید کاربران و نقش های IAMو نقش را انتخاب کنید SageMakerStudioExecutionRole_data-engineer.
  14. برای برچسب های خط مشی یا منابع کاتالوگ، انتخاب کنید منابع کاتالوگ داده نامگذاری شده.
  15. برای پایگاه داده ها، انتخاب کنید demo.
  16. برای جداول، انتخاب کنید web_marketing.
  17. برای جدول مجوزها ، را انتخاب کنید فوق العاده.
  18. برای قابل اعطا مجوزها ، را انتخاب کنید فوق العاده.
  19. را انتخاب کنید گرانت.
    در نهایت، مجوز پایگاه داده را برای SageMakerStudioExecutionRole_data-scientist:
  20. تحت مجوز داده، انتخاب کنید گرانت.
  21. برای اصولگرایان، انتخاب کنید کاربران و نقش های IAMو نقش را انتخاب کنید SageMakerStudioExecutionRole_data-scientist.
  22. برای برچسب های خط مشی یا منابع کاتالوگ، انتخاب کنید منابع کاتالوگ داده نامگذاری شده.
  23. برای پایگاه داده ها، انتخاب کنید demo.
  24. برای مجوزهای پایگاه داده، را انتخاب کنید شرح.
  25. را انتخاب کنید گرانت.

درباره نویسنده

مهندسی ویژگی در مقیاس بزرگ با محافظت از داده‌های حساس با استفاده از جلسات تعاملی AWS Glue و Amazon SageMaker Studio PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

Praveen Kumar یک معمار راه حل تجزیه و تحلیل در AWS است که در طراحی، ساخت، و پیاده سازی پلتفرم های داده و تجزیه و تحلیل مدرن با استفاده از خدمات بومی ابری تخصص دارد. حوزه های مورد علاقه او فناوری بدون سرور، انبارهای داده ابری مدرن، استریمینگ و برنامه های کاربردی ML است.

مهندسی ویژگی در مقیاس بزرگ با محافظت از داده‌های حساس با استفاده از جلسات تعاملی AWS Glue و Amazon SageMaker Studio PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

نوریتاکا سکیاما یک معمار اصلی داده های بزرگ در تیم AWS Glue است. او از همکاری با تیم های مختلف برای ارائه نتایجی مانند این پست لذت می برد. او در اوقات فراغت خود از بازی های ویدیویی با خانواده لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS