Sử dụng tập lệnh đào tạo của riêng bạn và tự động chọn mô hình tốt nhất bằng cách sử dụng tính năng tối ưu hóa siêu tham số trong Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Sử dụng tập lệnh đào tạo của riêng bạn và tự động chọn mô hình tốt nhất bằng cách sử dụng tính năng tối ưu hóa siêu tham số trong Amazon SageMaker

Sự thành công của bất kỳ quy trình máy học (ML) nào không chỉ phụ thuộc vào chất lượng của mô hình được sử dụng mà còn vào khả năng đào tạo và lặp lại mô hình này. Một trong những cách quan trọng để cải thiện mô hình ML là chọn các tham số có thể điều chỉnh tốt hơn, được gọi là siêu tham số. Điều này được gọi là tối ưu hóa siêu tham số (HPO). Tuy nhiên, việc thực hiện điều chỉnh này theo cách thủ công thường có thể cồng kềnh do kích thước của không gian tìm kiếm, đôi khi liên quan đến hàng nghìn lần lặp lại đào tạo.

bài đăng này cho thấy làm thế nào Amazon SageMaker cho phép bạn không chỉ sử dụng thuật toán mô hình của riêng mình bằng chế độ tập lệnh mà còn sử dụng thuật toán HPO tích hợp. Bạn sẽ học cách dễ dàng đưa ra chỉ số đánh giá được lựa chọn để amazoncloudwatch, từ đó bạn có thể trích xuất số liệu này để hướng dẫn thuật toán HPO tự động. Sau đó, bạn có thể tạo một công việc điều chỉnh HPO để sắp xếp một số công việc đào tạo và các tài nguyên điện toán liên quan. Sau khi hoàn thành, bạn có thể thấy công việc đào tạo tốt nhất theo số liệu đánh giá.

Tổng quan về giải pháp

Chúng tôi đi qua các bước sau:

  1. Sử dụng chế độ tập lệnh SageMaker để đưa mô hình của riêng chúng tôi lên trên bộ chứa do AWS quản lý.
  2. Tái cấu trúc kịch bản đào tạo của chúng tôi để in ra số liệu đánh giá của chúng tôi.
  3. Tìm số liệu trong Nhật ký CloudWatch.
  4. Trích xuất số liệu từ CloudWatch.
  5. Sử dụng HPO để chọn mô hình tốt nhất bằng cách điều chỉnh số liệu đánh giá này.
  6. Theo dõi HPO và tìm công việc đào tạo tốt nhất.

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

Sử dụng thuật toán tùy chỉnh trên bộ chứa do AWS quản lý

Tham khảo Mang theo mô hình của riêng bạn với chế độ tập lệnh Amazon SageMaker để có cái nhìn chi tiết hơn về việc đưa mô hình tùy chỉnh vào SageMaker bằng bộ chứa do AWS quản lý.

Chúng tôi sử dụng Tập dữ liệu MNIST cho ví dụ này. MNIST là bộ dữ liệu được sử dụng rộng rãi để phân loại chữ số viết tay, bao gồm 70,000 hình ảnh thang độ xám 28×28 pixel được dán nhãn của các chữ số viết tay. Bộ dữ liệu được chia thành 60,000 hình ảnh đào tạo và 10,000 hình ảnh thử nghiệm, chứa 10 lớp (một cho mỗi chữ số).

  1. Mở phiên bản sổ ghi chép của bạn và chạy lệnh sau để tải xuống mnist.py tập tin:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Trước khi chúng tôi nhận và lưu trữ dữ liệu, hãy tạo phiên SageMaker. Chúng ta cũng nên chỉ định nhóm S3 và tiền tố để sử dụng cho dữ liệu mô hình và đào tạo. Điều này phải ở trong cùng Khu vực với phiên bản sổ ghi chép, đào tạo và lưu trữ. Đoạn mã sau sử dụng thùng mặc định nếu nó đã tồn tại hoặc tạo một cái mới nếu nó không tồn tại. Chúng tôi cũng phải bao gồm vai trò IAM ARN để cung cấp quyền truy cập đào tạo và lưu trữ vào dữ liệu của bạn. Chúng tôi sử dụng get_execution_role() để nhận vai trò IAM mà bạn đã tạo cho phiên bản sổ ghi chép của mình.

  2. Tạo một phiên với đoạn mã sau:
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. Bây giờ hãy lấy dữ liệu, lưu trữ nó trong thư mục cục bộ của chúng tôi /data, và tải nó lên Amazon S3:
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    Bây giờ chúng ta có thể tạo một công cụ ước tính để thiết lập công việc đào tạo PyTorch. Chúng tôi không tập trung vào mã đào tạo thực tế ở đây (mnist.py) rất chi tiết. Hãy xem cách chúng ta có thể dễ dàng gọi tập lệnh đào tạo này để khởi tạo một công việc đào tạo.

  4. Trong đoạn mã sau, chúng tôi bao gồm một tập lệnh điểm nhập có tên là mnist.py chứa mã đào tạo tùy chỉnh của chúng tôi:
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. Để đảm bảo rằng công việc đào tạo này đã được định cấu hình chính xác, với mã đào tạo đang hoạt động, chúng tôi có thể bắt đầu công việc đào tạo bằng cách điều chỉnh công việc đó với dữ liệu mà chúng tôi đã tải lên Amazon S3. SageMaker đảm bảo dữ liệu của chúng tôi có sẵn trong hệ thống tệp cục bộ, vì vậy tập lệnh đào tạo của chúng tôi chỉ có thể đọc dữ liệu từ đĩa:
    estimator.fit({"training": inputs})

Tuy nhiên, chúng tôi không tạo ra một công việc đào tạo duy nhất. Chúng tôi sử dụng khả năng điều chỉnh mô hình tự động của SageMaker thông qua việc sử dụng công việc điều chỉnh siêu tham số. Điều chỉnh mô hình hoàn toàn không liên quan đến thuật toán mô hình thực tế. Để biết thêm thông tin về tất cả các siêu tham số mà bạn có thể điều chỉnh, hãy tham khảo Thực hiện điều chỉnh mô hình tự động với SageMaker.

Đối với mỗi siêu tham số mà chúng tôi muốn tối ưu hóa, chúng tôi phải xác định như sau:

  • Một cái tên
  • Một loại (tham số có thể là số nguyên, liên tục hoặc phân loại)
  • Một loạt các giá trị để khám phá
  • Loại chia tỷ lệ (tuyến tính, logarit, logarit ngược hoặc tự động); điều này cho phép chúng tôi kiểm soát cách một phạm vi tham số cụ thể sẽ được khám phá

Chúng tôi cũng phải xác định số liệu mà chúng tôi đang tối ưu hóa. Nó có thể là bất kỳ giá trị số nào miễn là nó hiển thị trong nhật ký đào tạo và bạn có thể chuyển một biểu thức chính quy để trích xuất nó.

Nếu chúng ta nhìn vào dòng 181 trong mnist.py, chúng ta có thể thấy cách chúng ta in tới bộ ghi:

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

Trên thực tế, chúng ta có thể thấy đầu ra này trong nhật ký của công việc đào tạo mà chúng ta vừa chạy. Bằng cách mở nhóm nhật ký /aws/sagemaker/TrainingJobs trên bảng điều khiển CloudWatch, chúng ta sẽ có một sự kiện nhật ký bắt đầu bằng pytorch-training- theo sau là dấu thời gian và tên được tạo.

Ảnh chụp màn hình sau đây làm nổi bật nhật ký mà chúng tôi đang tìm kiếm.

Bây giờ chúng ta hãy bắt đầu xây dựng công việc điều chỉnh siêu tham số của chúng ta.

  1. Như đã đề cập, trước tiên chúng ta phải xác định một số thông tin về siêu đường kính, bên dưới đối tượng như sau:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Ở đây chúng tôi đã xác định hai siêu tham số của mình. Tốc độ học (lr) là một tham số liên tục (do đó có giá trị liên tục) trong khoảng 0.001 và 0.1. Kích thước lô (batch-size) là một tham số phân loại với các giá trị rời rạc đứng trước.

    Tiếp theo, chúng tôi chỉ định số liệu khách quan mà chúng tôi muốn điều chỉnh và định nghĩa của nó. Điều này bao gồm biểu thức chính quy (regex) cần thiết để trích xuất số liệu đó từ nhật ký CloudWatch của công việc đào tạo mà chúng ta đã thấy trước đây. Chúng tôi cũng chỉ định một tên mô tả tổn thất kiểm tra trung bình và loại mục tiêu là Giảm thiểu, vì vậy việc điều chỉnh siêu tham số tìm cách giảm thiểu chỉ số khách quan khi tìm kiếm cài đặt siêu tham số tốt nhất.

  2. Chỉ định số liệu với mã sau:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Bây giờ chúng ta đã sẵn sàng để tạo HyperparameterTuner sự vật. Ngoài tên, loại và định nghĩa chỉ số mục tiêu, chúng tôi chuyển vào hyperparameter_ranges đối tượng và công cụ ước tính mà chúng tôi đã tạo trước đó. Chúng tôi cũng chỉ định tổng số lượng công việc mà chúng tôi muốn chạy, cùng với số lượng sẽ chạy song song. Chúng tôi đã chọn số lượng công việc tối đa là 9, nhưng thông thường bạn sẽ chọn số lượng cao hơn nhiều (chẳng hạn như 50) để có hiệu suất tối ưu.

  3. tạo HyperparameterTuner đối tượng có mã sau:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

Trước khi chúng tôi bắt đầu công việc điều chỉnh, cần lưu ý cách xác định sự kết hợp của các siêu đường kính. Để có kết quả tốt, bạn cần chọn đúng phạm vi để khám phá. Theo mặc định, chiến lược tìm kiếm Bayes được sử dụng, được mô tả thêm trong Cách hoạt động của Điều chỉnh siêu tham số.

Với tối ưu hóa Bayes, điều chỉnh siêu tham số được coi là hồi quy vấn đề. Để giải quyết vấn đề hồi quy này, nó đưa ra dự đoán về những kết hợp siêu tham số nào sẽ nhận được kết quả tốt nhất và chạy các công việc đào tạo để kiểm tra các giá trị này. Nó sử dụng hồi quy để chọn tập hợp các giá trị siêu tham số tiếp theo để kiểm tra. Có một sự đánh đổi khai thác/khám phá rõ ràng mà chiến lược tìm kiếm tạo ra ở đây. Nó có thể chọn các giá trị siêu tham số gần với sự kết hợp dẫn đến công việc đào tạo trước đó tốt nhất để từng bước cải thiện hiệu suất. Hoặc, nó có thể chọn các giá trị xa hơn, để thử và khám phá một phạm vi giá trị mới chưa được hiểu rõ.

Tuy nhiên, bạn có thể chỉ định các chiến lược tìm kiếm khác. Các chiến lược sau được hỗ trợ trong SageMaker:

  • Tìm kiếm lưới – Thử mọi kết hợp có thể có trong phạm vi siêu đường kính được chỉ định.
  • Tìm kiếm ngẫu nhiên – Thử kết hợp ngẫu nhiên trong phạm vi giá trị được chỉ định. Nó không phụ thuộc vào kết quả của các công việc đào tạo trước đó, vì vậy bạn có thể chạy số lượng công việc đào tạo đồng thời tối đa mà không ảnh hưởng đến hiệu suất của việc điều chỉnh.
  • tìm kiếm siêu băng tần – Sử dụng cả kết quả trung gian và kết quả cuối cùng của công việc đào tạo để phân bổ lại các kỷ nguyên cho các cấu hình siêu tham số được sử dụng hiệu quả và tự động dừng những kỷ nguyên hoạt động kém hiệu quả.

Bạn cũng có thể khám phá việc sử dụng thuật toán của riêng mình, như được giải thích trong Mang thuật toán tối ưu hóa siêu tham số của riêng bạn trên Amazon SageMaker.

  1. Sau đó, chúng tôi bắt đầu đào tạo trên chính đối tượng bộ chỉnh (không phải công cụ ước tính), gọi .fit() và chuyển đường dẫn S3 đến tập dữ liệu thử nghiệm và đào tạo của chúng tôi:
    tuner.fit({"training": inputs})

Sau đó, chúng tôi có thể theo dõi tiến trình công việc điều chỉnh của mình trên bảng điều khiển SageMaker, trên Công việc điều chỉnh siêu tham số trang. Công việc điều chỉnh tạo ra các tài nguyên tính toán cơ bản cần thiết bằng cách sắp xếp từng hoạt động đào tạo riêng lẻ và hoạt động tính toán liên quan.

Sau đó, thật dễ dàng để xem tất cả các công việc đào tạo riêng lẻ đã được hoàn thành hoặc đang được tiến hành, cùng với giá trị số liệu khách quan liên quan của chúng. Trong ảnh chụp màn hình sau đây, chúng ta có thể thấy lô công việc đào tạo đầu tiên đã hoàn tất, tổng cộng có ba công việc theo chỉ định của chúng tôi max_parallel_jobs giá trị là 3. Sau khi hoàn thành, chúng tôi có thể tìm thấy công việc đào tạo tốt nhất—công việc giảm thiểu tổn thất kiểm tra trung bình—trên Công việc đào tạo tốt nhất tab.

Ảnh chụp màn hình danh sách công việc đào tạo

Làm sạch

Để tránh phát sinh phí trong tương lai, hãy xóa các tài nguyên bạn đã khởi tạo. Đây là bộ chứa S3, vai trò IAM và phiên bản sổ ghi chép SageMaker.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về cách chúng tôi có thể đưa mô hình của riêng mình vào SageMaker, sau đó sử dụng tối ưu hóa siêu tham số tự động để chọn công việc đào tạo tốt nhất. Chúng tôi đã sử dụng bộ dữ liệu MNIST phổ biến để xem cách chúng tôi có thể chỉ định số liệu mục tiêu tùy chỉnh mà công việc HPO sẽ tối ưu hóa. Bằng cách trích xuất số liệu mục tiêu này từ CloudWatch và chỉ định các giá trị siêu tham số khác nhau, chúng tôi có thể dễ dàng khởi chạy và giám sát công việc HPO.

Nếu bạn cần thêm thông tin hoặc muốn xem khách hàng của chúng tôi đang sử dụng HPO như thế nào, hãy tham khảo Điều chỉnh mô hình tự động của Amazon SageMaker. Điều chỉnh mô hình của riêng bạn để tối ưu hóa siêu tham số tự động trong SageMaker ngay hôm nay.


Giới thiệu về tác giả

Sử dụng tập lệnh đào tạo của riêng bạn và tự động chọn mô hình tốt nhất bằng cách sử dụng tính năng tối ưu hóa siêu tham số trong Amazon SageMaker PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.giá sam là một Nhà tư vấn Dịch vụ Chuyên nghiệp chuyên về AI/ML và phân tích dữ liệu tại Amazon Web Services. Ông hợp tác chặt chẽ với các khách hàng thuộc khu vực công trong lĩnh vực chăm sóc sức khỏe và khoa học đời sống để giải quyết các vấn đề thách thức. Khi không làm việc này, Sam thích chơi ghi-ta, quần vợt và xem các ban nhạc indie yêu thích của mình.

Dấu thời gian:

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