Theo dõi các thử nghiệm ML của bạn từ đầu đến cuối bằng Kiểm soát phiên bản dữ liệu và Thử nghiệm dữ liệu PlatoBlockchain của Amazon SageMaker. Tìm kiếm dọc. Ái.

Theo dõi các thử nghiệm ML của bạn từ đầu đến cuối bằng Kiểm soát phiên bản dữ liệu và Thử nghiệm Amazon SageMaker

Các nhà khoa học dữ liệu thường nỗ lực tìm hiểu tác động của các chiến lược tiền xử lý dữ liệu và kỹ thuật tính năng khác nhau kết hợp với các kiến ​​trúc mô hình và siêu tham số khác nhau. Làm như vậy đòi hỏi bạn phải lặp đi lặp lại các không gian tham số lớn và việc theo dõi các cấu hình và kết quả đã chạy trước đó trong khi vẫn duy trì khả năng lặp lại các thử nghiệm có thể là điều quá sức.

Bài đăng này hướng dẫn bạn một ví dụ về cách theo dõi các thử nghiệm của bạn trên mã, dữ liệu, tạo phẩm và số liệu bằng cách sử dụng Thử nghiệm Amazon SageMaker kết hợp với Kiểm soát phiên bản dữ liệu (DVC). Chúng tôi chỉ ra cách bạn có thể sử dụng DVC song song với Amazon SageMaker công việc chế biến và đào tạo. Chúng tôi đào tạo các mô hình CatBoost khác nhau trên tập dữ liệu nhà ở California từ Kho lưu trữ StatLibvà thay đổi chiến lược loại bỏ trong khi theo dõi phiên bản dữ liệu bằng DVC. Trong mỗi thử nghiệm riêng lẻ, chúng tôi theo dõi các tạo phẩm, mã và số liệu đầu vào và đầu ra bằng Thử nghiệm SageMaker.

Thử nghiệm SageMaker

SageMaker Experiments là dịch vụ AWS để theo dõi các thử nghiệm máy học (ML). Các SDK Python của thử nghiệm SageMaker là giao diện cấp cao cho dịch vụ này giúp bạn theo dõi thông tin thử nghiệm bằng Python.

Mục tiêu của SageMaker Experiments là làm cho việc tạo thử nghiệm, điền thử nghiệm vào chúng đơn giản nhất có thể, thêm thông tin theo dõi và dòng dõi cũng như chạy phân tích trên các thử nghiệm và thử nghiệm.

Khi thảo luận về Thử nghiệm SageMaker, chúng tôi đề cập đến các khái niệm sau:

  • Thử nghiệm - Tập hợp các thử nghiệm liên quan. Bạn thêm các thử nghiệm vào một thử nghiệm mà bạn muốn so sánh với nhau.
  • Thử nghiệm – Mô tả quy trình làm việc ML gồm nhiều bước. Mỗi bước trong quy trình làm việc được mô tả bằng một thành phần thử nghiệm.
  • Thành phần dùng thử – Mô tả về một bước trong quy trình làm việc ML, chẳng hạn như làm sạch dữ liệu, trích xuất tính năng, đào tạo mô hình hoặc đánh giá mô hình.
  • Tracker – Trình quản lý bối cảnh Python để ghi thông tin về một thành phần dùng thử duy nhất (ví dụ: tham số, số liệu hoặc tạo phẩm).

Kiểm soát phiên bản dữ liệu

Kiểm soát phiên bản dữ liệu (DVC) là một loại phần mềm quản lý thử nghiệm, quy trình làm việc và phiên bản dữ liệu mới được xây dựng dựa trên đi (mặc dù nó có thể hoạt động độc lập). DVC giảm khoảng cách giữa các bộ công cụ kỹ thuật đã có và nhu cầu khoa học dữ liệu, cho phép bạn tận dụng các lợi thế mới Tính năng, đặc điểm đồng thời sử dụng lại các kỹ năng và trực giác hiện có.

Việc chia sẻ và cộng tác thử nghiệm khoa học dữ liệu có thể được thực hiện thông qua luồng Git thông thường (cam kết, phân nhánh, gắn thẻ, yêu cầu kéo) giống như cách nó hoạt động đối với các kỹ sư phần mềm. Với Git và DVC, nhóm khoa học dữ liệu và ML có thể phiên bản các thử nghiệm, quản lý bộ dữ liệu lớn và làm cho các dự án có thể tái tạo.

DVC có các tính năng sau:

  • DVC là một tự do, mã nguồn mở dòng lệnh công cụ.
  • DVC hoạt động trên kho Git và có giao diện dòng lệnh và luồng tương tự như Git. DVC cũng có thể hoạt động độc lập nhưng không cần versioning khả năng.
  • Phiên bản dữ liệu được kích hoạt bằng cách thay thế các tệp lớn, thư mục tập dữ liệu, mô hình ML, v.v. bằng các tệp nhỏ siêu tập tin (dễ xử lý với Git). Các phần giữ chỗ này trỏ đến dữ liệu gốc, dữ liệu này được tách riêng khỏi việc quản lý mã nguồn.
  • Bạn có thể sử dụng bộ lưu trữ tại chỗ hoặc đám mây để lưu trữ dữ liệu của dự án tách biệt với cơ sở mã của nó. Đây là cách các nhà khoa học dữ liệu có thể chuyển các tập dữ liệu lớn hoặc chia sẻ mô hình được đào tạo bằng GPU với những người khác.
  • DVC làm cho các dự án khoa học dữ liệu có thể tái tạo được bằng cách tạo ra các dữ liệu nhẹ đường ống sử dụng các biểu đồ phụ thuộc tiềm ẩn và bằng cách mã hóa dữ liệu và tạo phẩm có liên quan.
  • DVC là nền tảng bất khả tri. Nó chạy trên tất cả các hệ điều hành chính (Linux, macOS và Windows) và hoạt động độc lập với các ngôn ngữ lập trình (Python, R, Julia, shell script, v.v.) hoặc các thư viện ML (Keras, TensorFlow, PyTorch, Scipy và hơn) được sử dụng trong dự án.
  • DVC nhanh chóng cài đặt, dựng lên và không yêu cầu cơ sở hạ tầng đặc biệt cũng như không phụ thuộc vào API hoặc dịch vụ bên ngoài. Đó là một công cụ CLI độc lập.

Thử nghiệm SageMaker và mẫu DVC

Sau đây GitHub mẫu cho biết cách sử dụng DVC trong môi trường SageMaker. Cụ thể, chúng tôi xem xét cách xây dựng hình ảnh tùy chỉnh với các thư viện DVC được cài đặt theo mặc định để cung cấp môi trường phát triển nhất quán cho các nhà khoa học dữ liệu của bạn trong Xưởng sản xuất Amazon SageMakervà cách chạy DVC cùng với cơ sở hạ tầng do SageMaker quản lý để xử lý và đào tạo. Hơn nữa, chúng tôi còn trình bày cách làm phong phú thêm thông tin theo dõi SageMaker bằng thông tin lập phiên bản dữ liệu từ DVC và trực quan hóa chúng trong bảng điều khiển Studio.

Sơ đồ sau minh họa kiến ​​trúc giải pháp và quy trình làm việc.

Xây dựng hình ảnh Studio tùy chỉnh với DVC đã được cài đặt

Với Kho GitHub, chúng tôi giải thích cách tạo hình ảnh tùy chỉnh cho Studio đã cài đặt DVC. Ưu điểm của việc tạo hình ảnh và cung cấp hình ảnh đó cho tất cả người dùng Studio là nó tạo ra một môi trường nhất quán cho người dùng Studio mà họ cũng có thể chạy cục bộ. Mặc dù mẫu được dựa trên Đám mây AWS9, bạn cũng có thể xây dựng vùng chứa trên máy cục bộ của mình miễn là bạn đã cài đặt và chạy Docker. Mẫu này dựa trên những điều sau đây Dockerfilemôi trường.yml. Hình ảnh Docker kết quả được lưu trữ trong Đăng ký container đàn hồi Amazon (Amazon EMR) trong tài khoản AWS của bạn. Xem đoạn mã sau:

# Login to ECR
aws --region ${REGION} ecr get-login-password | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom

# Create the ECR repository
aws --region ${REGION} ecr create-repository --repository-name smstudio-custom

# Build the image - it might take a few minutes to complete this step
docker build . -t ${IMAGE_NAME} -t ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}

# Push the image to ECR
docker push ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/smstudio-custom:${IMAGE_NAME}

Bây giờ quý vị có thể tạo một miền Studio mới or cập nhật miền Studio hiện có có quyền truy cập vào hình ảnh Docker mới được tạo.

Chúng tôi sử dụng Bộ công cụ phát triển đám mây AWS (AWS CDK) để tạo các tài nguyên sau thông qua Hình thành đám mây AWS:

  • Vai trò thực thi SageMaker với các quyền phù hợp đối với miền Studio mới hoặc hiện tại của bạn
  • Hình ảnh SageMaker và phiên bản hình ảnh SageMaker từ hình ảnh Docker conda-env-dvc-kernel mà chúng tôi đã tạo trước đó
  • An AppImageConfig chỉ định cách cấu hình cổng kernel
  • Người dùng Studio (data-scientist-dvc) với vai trò thực thi SageMaker chính xác và hình ảnh Studio tùy chỉnh có sẵn cho vai trò đó

Để được hướng dẫn chi tiết, hãy tham khảo Liên kết hình ảnh tùy chỉnh với SageMaker Studio.

Chạy phòng thí nghiệm

Để chạy phòng thí nghiệm, hãy hoàn thành các bước sau:

  1. Trong miền Studio, khởi chạy Studio dành cho data-scientist-dvc người sử dụng.
  2. Chọn biểu tượng Git, sau đó chọn Sao chép kho lưu trữ.
    Sao chép kho lưu trữ
  3. Nhập URL của kho lưu trữ (https://github.com/aws-samples/amazon-sagemaker-experiments-dvc-demo) và lựa chọn Clone.Sao chép nút repo
  4. Trong trình duyệt tập tin, chọn amazon-sagemaker-experiments-dvc-demo kho.
  5. Mở dvc_sagemaker_script_mode.ipynb sổ tay.
  6. Trong Hình ảnh tùy chỉnh, chọn hình ảnh conda-env-dvc-kernel.
  7. Chọn Chọn.
    conda-env-dvc-kernel

Định cấu hình DVC để lập phiên bản dữ liệu

Chúng tôi tạo một thư mục con để chuẩn bị dữ liệu: sagemaker-dvc-sample. Trong thư mục con này, chúng tôi khởi tạo kho lưu trữ Git mới và đặt điều khiển từ xa thành kho lưu trữ mà chúng tôi tạo trong Cam kết mã AWS. Mục tiêu là có các cấu hình và tệp DVC để theo dõi dữ liệu được phiên bản trong kho lưu trữ này. Tuy nhiên, Git cung cấp các khả năng riêng để quản lý các dự án con thông qua các mô-đun con git và cây con git, chẳng hạn như bạn có thể mở rộng mẫu này để sử dụng bất kỳ công cụ nào nói trên phù hợp nhất với quy trình làm việc của bạn.

Ưu điểm chính của việc sử dụng CodeCommit với SageMaker trong trường hợp của chúng tôi là sự tích hợp với Quản lý truy cập và nhận dạng AWS (IAM) để xác thực và ủy quyền, nghĩa là chúng ta có thể sử dụng vai trò IAM để đẩy và lấy dữ liệu mà không cần tìm nạp thông tin xác thực (hoặc khóa SSH). Việc đặt các quyền thích hợp trên vai trò thực thi SageMaker cũng cho phép sổ ghi chép Studio cũng như công việc đào tạo và xử lý SageMaker tương tác an toàn với CodeCommit.

Mặc dù bạn có thể thay thế CodeCommit bằng bất kỳ dịch vụ kiểm soát nguồn nào khác, chẳng hạn như GitHub, Gitlab hoặc Bitbucket, nhưng bạn cần xem xét cách xử lý thông tin xác thực cho hệ thống của mình. Một khả năng là lưu trữ những thông tin xác thực này trên Quản lý bí mật AWS và tìm nạp chúng trong thời gian chạy từ sổ ghi chép Studio cũng như từ các công việc đào tạo và xử lý của SageMaker.

Khởi tạo DVC

Xử lý và đào tạo với DVC và SageMaker

Trong phần này, chúng ta khám phá hai cách tiếp cận khác nhau để giải quyết vấn đề và cách chúng ta có thể theo dõi hai thử nghiệm bằng Thử nghiệm SageMaker theo kiến ​​trúc khái niệm cấp cao mà chúng tôi đã giới thiệu cho bạn trước đó.

Thiết lập thử nghiệm SageMaker

Để theo dõi thử nghiệm này trong SageMaker, chúng ta cần tạo một thử nghiệm. Chúng ta cũng cần xác định thử nghiệm trong thử nghiệm. Để đơn giản, chúng tôi chỉ xem xét một lần thử cho thử nghiệm nhưng bạn có thể có bất kỳ số lần thử nào trong một thử nghiệm, chẳng hạn như nếu bạn muốn thử nghiệm các thuật toán khác nhau.

Chúng tôi tạo ra một thử nghiệm có tên DEMO-sagemaker-experiments-dvc với hai thử nghiệm, dvc-trial-single-filedvc-trial-multi-files, mỗi cái đại diện cho một phiên bản khác nhau của tập dữ liệu.

Hãy tạo ra DEMO-sagemaker-experiments-dvc cuộc thí nghiệm:

from smexperiments.experiment import Experiment
from smexperiments.trial import Trial
from smexperiments.trial_component import TrialComponent
from smexperiments.tracker import Tracker

experiment_name = 'DEMO-sagemaker-experiments-dvc'

# create the experiment if it doesn't exist
try:
    my_experiment = Experiment.load(experiment_name=experiment_name)
    print("existing experiment loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_experiment = Experiment.create(
            experiment_name = experiment_name,
            description = "How to integrate DVC"
        )
        print("new experiment created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

Kiểm tra 1: Tạo các tệp đơn để đào tạo và xác thực

Trong phần này, chúng tôi tạo một tập lệnh xử lý để tìm nạp dữ liệu thô trực tiếp từ Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) làm đầu vào; xử lý nó để tạo các tập dữ liệu đào tạo, xác nhận và kiểm tra; và lưu trữ kết quả trở lại Amazon S3 bằng DVC. Ngoài ra, chúng tôi còn trình bày cách bạn có thể theo dõi các tạo phẩm đầu ra do DVC tạo ra bằng SageMaker khi chạy các công việc xử lý và đào tạo cũng như thông qua Thử nghiệm SageMaker.

Đầu tiên, chúng ta tạo ra dvc-trial-single-file dùng thử và thêm nó vào DEMO-sagemaker-experiments-dvc cuộc thí nghiệm. Bằng cách đó, chúng tôi sắp xếp tất cả các thành phần thử nghiệm liên quan đến thử nghiệm này một cách có ý nghĩa.

first_trial_name = "dvc-trial-single-file"

try:
    my_first_trial = Trial.load(trial_name=first_trial_name)
    print("existing trial loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_first_trial = Trial.create(
            experiment_name=experiment_name,
            trial_name=first_trial_name,
        )
        print("new trial created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

Sử dụng DVC trong công việc xử lý SageMaker để tạo phiên bản tệp duy nhất

Trong phần này, chúng tôi tạo tập lệnh xử lý lấy dữ liệu thô trực tiếp từ Amazon S3 làm đầu vào bằng khả năng tải dữ liệu được quản lý của SageMaker; xử lý nó để tạo các tập dữ liệu đào tạo, xác nhận và kiểm tra; và lưu trữ kết quả trở lại Amazon S3 bằng DVC. Điều rất quan trọng là phải hiểu rằng khi sử dụng DVC để lưu trữ dữ liệu vào Amazon S3 (hoặc lấy dữ liệu từ Amazon S3), chúng tôi sẽ mất khả năng tải dữ liệu do SageMaker quản lý. Điều này có thể ảnh hưởng đến hiệu suất và chi phí cho công việc xử lý và đào tạo của chúng tôi , đặc biệt khi làm việc với các tập dữ liệu rất lớn. Để biết thêm thông tin về các khả năng khác nhau của chế độ nhập liệu gốc SageMaker, hãy tham khảo Truy cập dữ liệu đào tạo.

Cuối cùng, chúng tôi hợp nhất khả năng theo dõi DVC với khả năng theo dõi của SageMaker khi chạy các công việc xử lý thông qua Thử nghiệm SageMaker.

Tập lệnh xử lý yêu cầu địa chỉ của kho lưu trữ Git và nhánh mà chúng tôi muốn tạo để lưu trữ siêu dữ liệu DVC được truyền qua các biến môi trường. Bản thân các bộ dữ liệu được DVC lưu trữ trong Amazon S3. Mặc dù các biến môi trường được theo dõi tự động trong Thử nghiệm SageMaker và hiển thị trong các tham số thành phần thử nghiệm, nhưng chúng tôi có thể muốn làm phong phú thêm các thành phần thử nghiệm bằng thông tin bổ sung, sau đó sẽ có sẵn để trực quan hóa trong Giao diện người dùng Studio bằng cách sử dụng đối tượng theo dõi. Trong trường hợp của chúng tôi, các tham số thành phần dùng thử bao gồm:

  • DVC_REPO_URL
  • DVC_BRANCH
  • USER
  • data_commit_hash
  • train_test_split_ratio

Tập lệnh tiền xử lý sao chép kho Git; tạo ra các tập dữ liệu đào tạo, xác nhận và kiểm tra; và đồng bộ hóa nó bằng DVC. Như đã đề cập trước đó, khi sử dụng DVC, chúng tôi không thể tận dụng khả năng tải dữ liệu gốc của SageMaker. Ngoài các hình phạt về hiệu suất mà chúng tôi có thể phải gánh chịu trên các tập dữ liệu lớn, chúng tôi còn mất khả năng theo dõi tự động đối với các tạo phẩm đầu ra. Tuy nhiên, nhờ trình theo dõi và API DVC Python, chúng tôi có thể bù đắp những thiếu sót này, truy xuất thông tin đó trong thời gian chạy và lưu trữ nó trong thành phần dùng thử mà không tốn nhiều công sức. Giá trị gia tăng khi làm như vậy là có được một chế độ xem duy nhất về các tạo phẩm đầu vào và đầu ra thuộc về công việc xử lý cụ thể này.

Tập lệnh Python tiền xử lý đầy đủ có sẵn trong Repo GitHub.

with Tracker.load() as tracker:
    tracker.log_parameters({"data_commit_hash": commit_hash})
    for file_type in file_types:
        path = dvc.api.get_url(
            f"{data_path}/{file_type}/california_{file_type}.csv",
            repo=dvc_repo_url,
            rev=dvc_branch
        )
        tracker.log_output(name=f"california_{file_type}",value=path)

SageMaker cung cấp cho chúng tôi khả năng chạy tập lệnh xử lý trên các hình ảnh vùng chứa do AWS quản lý được tối ưu hóa để chạy trên cơ sở hạ tầng AWS. Nếu tập lệnh của chúng tôi yêu cầu các phần phụ thuộc bổ sung, chúng tôi có thể cung cấp một requirements.txt tài liệu. Khi chúng tôi bắt đầu công việc xử lý, SageMaker sử dụng pip-install để cài đặt tất cả các thư viện chúng ta cần (ví dụ: các thư viện liên quan đến DVC). Nếu bạn cần kiểm soát chặt chẽ hơn tất cả các thư viện được cài đặt trên vùng chứa, bạn có thể mang vùng chứa của riêng mình vào SageMaker, chẳng hạn như xử lý và Đào tạo.

Bây giờ chúng tôi có tất cả các thành phần để chạy công việc xử lý SageMaker của mình:

  • Một tập lệnh xử lý có thể xử lý một số đối số (--train-test-split-ratio) và hai biến môi trường (DVC_REPO_URLDVC_BRANCH)
  • A requiremets.txt hồ sơ
  • Kho lưu trữ Git (trong CodeCommit)
  • Thử nghiệm và dùng thử SageMaker
from sagemaker.processing import FrameworkProcessor, ProcessingInput
from sagemaker.sklearn.estimator import SKLearn

dvc_repo_url = "codecommit::{}://sagemaker-dvc-sample".format(region)
dvc_branch = my_first_trial.trial_name

script_processor = FrameworkProcessor(
    estimator_cls=SKLearn,
    framework_version='0.23-1',
    instance_count=1,
    instance_type='ml.m5.xlarge',
    env={
        "DVC_REPO_URL": dvc_repo_url,
        "DVC_BRANCH": dvc_branch,
        "USER": "sagemaker"
    },
    role=role
)

experiment_config={
    "ExperimentName": my_experiment.experiment_name,
    "TrialName": my_first_trial.trial_name
}

Sau đó chúng tôi chạy công việc xử lý với preprocessing-experiment.py kịch bản, experiment_config, dvc_repo_urldvc_branch chúng tôi đã xác định trước đó.

%%time

script_processor.run(
    code='./source_dir/preprocessing-experiment.py',
    dependencies=['./source_dir/requirements.txt'],
    inputs=[ProcessingInput(source=s3_data_path, destination="/opt/ml/processing/input")],
    experiment_config=experiment_config,
    arguments=["--train-test-split-ratio", "0.2"]
)

Công việc xử lý mất khoảng 5 phút để hoàn thành. Bây giờ bạn có thể xem chi tiết bản dùng thử cho tập dữ liệu tệp đơn.

Ảnh chụp màn hình sau đây cho biết nơi bạn có thể tìm thấy thông tin được lưu trữ trong Studio. Lưu ý các giá trị cho dvc-trial-single-file in DVC_BRANCH, DVC_REPO_URLdata_commit_hash trên Thông số tab.

Tab tham số SageMaker Experiment

Cũng lưu ý các chi tiết đầu vào và đầu ra trên Hiện vật tab.

Tab cấu phần thử nghiệm của SageMaker

Tạo một công cụ ước tính và điều chỉnh mô hình với phiên bản dữ liệu tệp đơn

Để sử dụng tích hợp DVC bên trong công việc đào tạo SageMaker, chúng tôi chuyển một dvc_repo_urldvc_branch làm biến môi trường khi bạn tạo đối tượng Công cụ ước tính.

Chúng tôi đào tạo trên dvc-trial-single-file phân nhánh đầu tiên.

Khi kéo dữ liệu bằng DVC, chúng tôi sử dụng cấu trúc tập dữ liệu sau:

dataset
    |-- train
    |   |-- california_train.csv
    |-- test
    |   |-- california_test.csv
    |-- validation
    |   |-- california_validation.csv

Bây giờ chúng tôi tạo Công cụ ước tính Scikit-learn bằng cách sử dụng SDK Python của SageMaker. Điều này cho phép chúng tôi chỉ định những điều sau:

  • Đường dẫn đến tệp nguồn Python, tệp này sẽ được chạy làm điểm bắt đầu cho quá trình đào tạo.
  • Vai trò IAM kiểm soát các quyền truy cập dữ liệu Amazon S3 và CodeCommit cũng như chạy các chức năng SageMaker.
  • Danh sách các từ điển xác định các số liệu được sử dụng để đánh giá công việc đào tạo.
  • Số lượng và loại hình đào tạo. Chúng tôi sử dụng một phiên bản ml.m5.large.
  • Siêu tham số được sử dụng để đào tạo.
  • Các biến môi trường để sử dụng trong quá trình đào tạo. Chúng tôi sử dụng DVC_REPO_URL, DVC_BRANCHUSER.
metric_definitions = [{'Name': 'median-AE', 'Regex': "AE-at-50th-percentile: ([0-9.]+).*$"}]

hyperparameters={ 
        "learning_rate" : 1,
        "depth": 6
    }
estimator = SKLearn(
    entry_point='train.py',
    source_dir='source_dir',
    role=role,
    metric_definitions=metric_definitions,
    hyperparameters=hyperparameters,
    instance_count=1,
    instance_type='ml.m5.large',
    framework_version='0.23-1',
    base_job_name='training-with-dvc-data',
    environment={
        "DVC_REPO_URL": dvc_repo_url,
        "DVC_BRANCH": dvc_branch,
        "USER": "sagemaker"
    }
)

experiment_config={
    "ExperimentName": my_experiment.experiment_name,
    "TrialName": my_first_trial.trial_name
}

Chúng tôi gọi phương thức phù hợp của Công cụ ước tính với Experiment_config mà chúng tôi đã xác định trước đó để bắt đầu đào tạo.

%%time
estimator.fit(experiment_config=experiment_config)

Công việc đào tạo mất khoảng 5 phút để hoàn thành. Nhật ký hiển thị những dòng đó, cho biết các tệp được DVC kéo:

Running dvc pull command
A       train/california_train.csv
A       test/california_test.csv
A       validation/california_validation.csv
3 files added and 3 files fetched
Starting the training.
Found train files: ['/opt/ml/input/data/dataset/train/california_train.csv']
Found validation files: ['/opt/ml/input/data/dataset/train/california_train.csv']

Kiểm tra 2: Tạo nhiều tệp để đào tạo và xác thực

Chúng tôi tạo ra một dvc-trial-multi-files dùng thử và thêm nó vào hiện tại DEMO-sagemaker-experiments-dvc thí nghiệm.

second_trial_name = "dvc-trial-multi-files"
try:
    my_second_trial = Trial.load(trial_name=second_trial_name)
    print("existing trial loaded")
except Exception as ex:
    if "ResourceNotFound" in str(ex):
        my_second_trial = Trial.create(
            experiment_name=experiment_name,
            trial_name=second_trial_name,
        )
        print("new trial created")
    else:
        print(f"Unexpected {ex}=, {type(ex)}")
        print("Dont go forward!")
        raise

Khác với tập lệnh xử lý đầu tiên, giờ đây chúng tôi tạo nhiều tệp từ tập dữ liệu gốc để đào tạo và xác thực, đồng thời lưu trữ siêu dữ liệu DVC ở một nhánh khác.

Bạn có thể khám phá tập lệnh Python tiền xử lý thứ hai trên GitHub.

%%time

script_processor.run(
    code='./source_dir/preprocessing-experiment-multifiles.py',
    dependencies=['./source_dir/requirements.txt'],
    inputs=[ProcessingInput(source=s3_data_path, destination="/opt/ml/processing/input")],
    experiment_config=experiment_config,
    arguments=["--train-test-split-ratio", "0.1"]
)

Công việc xử lý mất khoảng 5 phút để hoàn thành. Bây giờ bạn có thể xem chi tiết bản dùng thử cho tập dữ liệu nhiều tệp.

Các ảnh chụp màn hình sau đây cho biết nơi bạn có thể tìm thấy thông tin được lưu trữ trong Thử nghiệm SageMaker trong Thành phần thử nghiệm phần trong giao diện người dùng Studio. Lưu ý các giá trị cho dvc-trial-multi-files in DVC_BRANCH, DVC_REPO_URLdata_commit_hash trên Thông số tab.

Tab tham số thử nghiệm nhiều tệp của SageMaker

Bạn cũng có thể xem lại chi tiết đầu vào và đầu ra trên Hiện vật tab.

Tab tạo phẩm thử nghiệm nhiều tệp của SageMaker

Bây giờ chúng tôi đào tạo trên dvc-trial-multi-files chi nhánh. Khi kéo dữ liệu bằng DVC, chúng tôi sử dụng cấu trúc tập dữ liệu sau:

dataset
    |-- train
    |   |-- california_train_1.csv
    |   |-- california_train_2.csv
    |   |-- california_train_3.csv
    |   |-- california_train_4.csv
    |   |-- california_train_5.csv
    |-- test
    |   |-- california_test.csv
    |-- validation
    |   |-- california_validation_1.csv
    |   |-- california_validation_2.csv
    |   |-- california_validation_3.csv

Tương tự như chúng tôi đã làm trước đây, chúng tôi tạo Công cụ ước tính Scikit-learn mới với tên dùng thử dvc-trial-multi-files và bắt đầu công việc đào tạo.

%%time

estimator.fit(experiment_config=experiment_config)

Công việc đào tạo mất khoảng 5 phút để hoàn thành. Khi xuất ra nhật ký công việc đào tạo vào sổ ghi chép, bạn có thể thấy những dòng đó, cho biết các tệp được DVC kéo:

Running dvc pull command
A       validation/california_validation_2.csv
A       validation/california_validation_1.csv
A       validation/california_validation_3.csv
A       train/california_train_4.csv
A       train/california_train_5.csv
A       train/california_train_2.csv
A       train/california_train_3.csv
A       train/california_train_1.csv
A       test/california_test.csv
9 files added and 9 files fetched
Starting the training.
Found train files: ['/opt/ml/input/data/dataset/train/california_train_2.csv', '/opt/ml/input/data/dataset/train/california_train_5.csv', '/opt/ml/input/data/dataset/train/california_train_4.csv', '/opt/ml/input/data/dataset/train/california_train_1.csv', '/opt/ml/input/data/dataset/train/california_train_3.csv']
Found validation files: ['/opt/ml/input/data/dataset/validation/california_validation_2.csv', '/opt/ml/input/data/dataset/validation/california_validation_1.csv', '/opt/ml/input/data/dataset/validation/california_validation_3.csv']

Lưu trữ mô hình của bạn trong SageMaker

Sau khi huấn luyện mô hình ML, bạn có thể triển khai mô hình đó bằng SageMaker. Để triển khai một điểm cuối theo thời gian thực, liên tục, đưa ra một dự đoán tại một thời điểm, chúng tôi sử dụng Dịch vụ lưu trữ thời gian thực của SageMaker.

from sagemaker.serializers import CSVSerializer

predictor = estimator.deploy(1, "ml.t2.medium", serializer=CSVSerializer())

Đầu tiên, chúng tôi lấy tập dữ liệu thử nghiệm mới nhất cục bộ trên sổ ghi chép phát triển trong Studio. Với mục đích này, chúng ta có thể sử dụng dvc.api.read() để tải dữ liệu thô được lưu trữ trong Amazon S3 bằng tác vụ xử lý SageMaker.

import io
import dvc.api

raw = dvc.api.read(
    "dataset/test/california_test.csv",
    repo=dvc_repo_url,
    rev=dvc_branch
)

Sau đó, chúng tôi chuẩn bị dữ liệu bằng Pandas, tải tệp CSV thử nghiệm và gọi predictor.predict để gọi điểm cuối SageMaker đã tạo trước đó cùng với dữ liệu và nhận dự đoán.

test = pd.read_csv(io.StringIO(raw), sep=",", header=None)
X_test = test.iloc[:, 1:].values
y_test = test.iloc[:, 0:1].values

predicted = predictor.predict(X_test)
for i in range(len(predicted)-1):
    print(f"predicted: {predicted[i]}, actual: {y_test[i][0]}")

Xóa điểm cuối

Bạn nên xóa các điểm cuối khi chúng không còn được sử dụng nữa vì chúng sẽ được tính phí theo thời gian triển khai (để biết thêm thông tin, hãy xem Amazon SageMaker Giá). Đảm bảo xóa điểm cuối để tránh chi phí không mong muốn.

predictor.delete_endpoint()

Làm sạch

Trước khi xóa tất cả tài nguyên bạn đã tạo, hãy đảm bảo rằng tất cả ứng dụng đều bị xóa khỏi data-scientist-dvc người dùng, bao gồm tất cả các ứng dụng KernelGateway, cũng như ứng dụng JupiterServer mặc định.

Sau đó, bạn có thể hủy ngăn xếp AWS CDK bằng cách chạy lệnh sau:

cdk destroy

Nếu bạn đã sử dụng miền hiện có, hãy chạy các lệnh sau:

# inject your DOMAIN_ID into the configuration file
sed -i 's/<your-sagemaker-studio-domain-id>/'"$DOMAIN_ID"'/' ../update-domain-no-custom-images.json
# update the sagemaker studio domain
aws --region ${REGION} sagemaker update-domain --cli-input-json file://../update-domain-no-custom-images.json

Kết luận

Trong bài đăng này, bạn đã xem qua ví dụ về cách theo dõi các thử nghiệm của mình qua mã, dữ liệu, thành phần lạ và số liệu bằng cách sử dụng Thử nghiệm SageMaker cũng như các công việc đào tạo và xử lý SageMaker kết hợp với DVC. Chúng tôi đã tạo hình ảnh Docker chứa DVC, vốn được yêu cầu cho Studio làm sổ tay phát triển, đồng thời chỉ ra cách bạn có thể sử dụng các công việc xử lý và đào tạo với DVC. Chúng tôi đã chuẩn bị hai phiên bản dữ liệu và sử dụng DVC để quản lý dữ liệu đó bằng Git. Sau đó, bạn đã sử dụng Thử nghiệm SageMaker để theo dõi quá trình xử lý và huấn luyện với hai phiên bản dữ liệu nhằm có chế độ xem thống nhất về các tham số, thành phần lạ và số liệu trong một khung kính duy nhất. Cuối cùng, bạn đã triển khai mô hình đến điểm cuối SageMaker và sử dụng tập dữ liệu thử nghiệm từ phiên bản tập dữ liệu thứ hai để gọi điểm cuối SageMaker và nhận dự đoán.

Bước tiếp theo, bạn có thể mở rộng sổ ghi chép hiện có và giới thiệu chiến lược kỹ thuật tính năng của riêng mình, đồng thời sử dụng DVC và SageMaker để chạy thử nghiệm của mình. Hãy đi xây dựng!

Để đọc thêm, hãy tham khảo các tài nguyên sau:


Về các tác giả

Paolo Di FrancescoPaolo Di Francesco là kiến ​​trúc sư giải pháp tại AWS. Ông có kinh nghiệm trong lĩnh vực viễn thông và công nghệ phần mềm. Anh ấy đam mê học máy và hiện đang tập trung vào việc sử dụng kinh nghiệm của mình để giúp khách hàng đạt được mục tiêu của họ trên AWS, đặc biệt là trong các cuộc thảo luận về MLOps. Ngoài công việc, anh thích chơi bóng đá và đọc sách.

Eitan SelaEitan Sela là một Kiến trúc sư Giải pháp Chuyên gia về Học máy với Dịch vụ Web của Amazon. Anh làm việc với các khách hàng của AWS để cung cấp hướng dẫn và hỗ trợ kỹ thuật, giúp họ xây dựng và vận hành các giải pháp học máy trên AWS. Khi rảnh rỗi, Eitan thích chạy bộ và đọc các bài báo mới nhất về máy học.

Dấu thời gian:

Thêm từ Học máy AWS