Logo Zephyrnet

Bảo mật MLflow trong AWS: Kiểm soát truy cập chi tiết với các dịch vụ gốc của AWS

Ngày:

Với Amazon SageMaker, bạn có thể quản lý toàn bộ vòng đời máy học (ML) từ đầu đến cuối. Nó cung cấp nhiều khả năng riêng để giúp quản lý các khía cạnh của quy trình ML, chẳng hạn như theo dõi thử nghiệm và quản trị mô hình thông qua sổ đăng ký mô hình. Bài đăng này cung cấp giải pháp phù hợp với những khách hàng đã sử dụng MLflow, một nền tảng nguồn mở để quản lý quy trình công việc ML.

Trong một trước bài, chúng ta đã thảo luận về MLflow và cách MLflow có thể chạy trên AWS cũng như được tích hợp với SageMaker—đặc biệt là khi theo dõi các công việc đào tạo dưới dạng thử nghiệm và triển khai một mô hình đã đăng ký trong MLflow cho cơ sở hạ tầng do SageMaker quản lý. Tuy nhiên, các phiên bản mã nguồn mở của MLflow không cung cấp cơ chế kiểm soát quyền truy cập của người dùng gốc cho nhiều đối tượng thuê trên máy chủ theo dõi. Điều này có nghĩa là bất kỳ người dùng nào có quyền truy cập vào máy chủ đều có quyền quản trị và có thể sửa đổi thử nghiệm, phiên bản mô hình và giai đoạn. Đây có thể là một thách thức đối với các doanh nghiệp trong các ngành được quản lý cần duy trì mô hình quản trị mạnh mẽ cho mục đích kiểm toán.

Trong bài đăng này, chúng tôi giải quyết những hạn chế này bằng cách triển khai kiểm soát truy cập bên ngoài máy chủ MLflow và giảm tải các tác vụ xác thực và ủy quyền cho Cổng API Amazon, nơi chúng tôi triển khai các cơ chế kiểm soát truy cập chi tiết ở cấp tài nguyên bằng cách sử dụng Nhận dạng và quản lý truy cập (TÔI LÀ). Bằng cách đó, chúng tôi có thể đạt được quyền truy cập mạnh mẽ và an toàn vào máy chủ MLflow từ cả cơ sở hạ tầng do SageMaker quản lý và Xưởng sản xuất Amazon SageMaker, mà không phải lo lắng về thông tin đăng nhập và tất cả sự phức tạp đằng sau việc quản lý thông tin đăng nhập. Thiết kế mô-đun được đề xuất trong kiến ​​trúc này giúp việc sửa đổi logic kiểm soát truy cập trở nên đơn giản mà không ảnh hưởng đến chính máy chủ MLflow. Cuối cùng, nhờ khả năng mở rộng của SageMaker Studio, chúng tôi cải thiện hơn nữa trải nghiệm của nhà khoa học dữ liệu bằng cách làm cho MLflow có thể truy cập được trong Studio, như minh họa trong ảnh chụp màn hình sau.

MLflow trong Studio

MLflow đã tích hợp tính năng cho phép yêu cầu ký bằng thông tin đăng nhập AWS vào kho lưu trữ ngược dòng cho SDK Python của nó, cải thiện khả năng tích hợp với SageMaker. Các thay đổi đối với MLflow Python SDK có sẵn cho mọi người kể từ phiên bản MLflow 1.30.0.

Ở cấp độ cao, bài đăng này thể hiện những điều sau:

  • Cách triển khai máy chủ MLflow trên kiến ​​trúc serverless chạy trên mạng con riêng tư không thể truy cập trực tiếp từ bên ngoài. Đối với nhiệm vụ này, chúng tôi xây dựng trên repo GitHub sau: Quản lý vòng đời máy học của bạn với MLflow và Amazon SageMaker.
  • Cách hiển thị máy chủ MLflow thông qua tích hợp riêng với Cổng API và triển khai kiểm soát truy cập an toàn để truy cập theo chương trình qua SDK và truy cập trình duyệt qua giao diện người dùng MLflow.
  • Cách ghi nhật ký thử nghiệm và chạy cũng như đăng ký mô hình vào máy chủ MLflow từ SageMaker bằng vai trò thực thi SageMaker được liên kết để xác thực và ủy quyền yêu cầu cũng như cách xác thực qua Nhận thức về Amazon vào giao diện người dùng MLflow. Chúng tôi cung cấp các ví dụ minh họa việc theo dõi thử nghiệm và sử dụng sổ đăng ký mô hình với MLflow từ các công việc đào tạo SageMaker và Studio, tương ứng, trong phần được cung cấp máy tính xách tay.
  • Cách sử dụng MLflow làm kho lưu trữ tập trung trong thiết lập nhiều tài khoản.
  • Cách mở rộng Studio để nâng cao trải nghiệm người dùng bằng cách hiển thị MLflow trong Studio. Đối với tác vụ này, chúng tôi trình bày cách tận dụng khả năng mở rộng của Studio bằng cách cài đặt tiện ích mở rộng JupyterLab.

Bây giờ chúng ta hãy đi sâu hơn vào các chi tiết.

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

Bạn có thể nghĩ về MLflow như ba thành phần cốt lõi khác nhau hoạt động song song với nhau:

  • API REST cho máy chủ theo dõi MLflow phụ trợ
  • SDK để bạn tương tác theo chương trình với API máy chủ theo dõi MLflow từ mã đào tạo mô hình của bạn
  • Giao diện người dùng React cho giao diện người dùng MLflow để trực quan hóa các thử nghiệm, lần chạy và tạo phẩm của bạn

Ở cấp độ cao, kiến ​​trúc mà chúng tôi đã hình dung và triển khai được thể hiện trong hình dưới đây.

Kiến trúc

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

Trước khi triển khai giải pháp, hãy đảm bảo bạn có quyền truy cập vào tài khoản AWS với quyền quản trị viên.

Triển khai hạ tầng giải pháp

Để triển khai giải pháp được mô tả trong bài đăng này, hãy làm theo hướng dẫn chi tiết trong Kho GitHub ĐỌC. Để tự động hóa việc triển khai cơ sở hạ tầng, chúng tôi sử dụng Bộ công cụ phát triển đám mây AWS (AWS CDK). AWS CDK là một khung phát triển phần mềm mã nguồn mở để tạo Hình thành đám mây AWS ngăn xếp thông qua tự động Mẫu CloudFormation thế hệ. Ngăn xếp là tập hợp các tài nguyên AWS có thể được cập nhật, di chuyển hoặc xóa theo chương trình. CDK AWS cấu trúc là các khối xây dựng của ứng dụng AWS CDK, đại diện cho kế hoạch chi tiết để xác định kiến ​​trúc đám mây.

Chúng tôi kết hợp bốn ngăn xếp:

  • Sản phẩm MLFlowVPCstack ngăn xếp thực hiện các hành động sau:
  • Sản phẩm Phần còn lạiApiCổngStack ngăn xếp thực hiện các hành động sau:
    • Hiển thị máy chủ MLflow thông qua AWS PrivateLink với Cổng API REST.
    • Triển khai nhóm người dùng Amazon Cognito để quản lý người dùng truy cập giao diện người dùng (vẫn trống sau khi triển khai).
    • Triển khai một AWS Lambda ủy quyền để xác minh mã thông báo JWT bằng khóa ID nhóm người dùng Amazon Cognito và trả về các chính sách IAM để cho phép hoặc từ chối yêu cầu. Chiến lược ủy quyền này được áp dụng cho <MLFlow-Tracking-Server-URI>/*.
    • Thêm một người ủy quyền IAM. Điều này sẽ được áp dụng cho các <MLFlow-Tracking-Server-URI>/api/*, cái này sẽ được ưu tiên hơn cái trước.
  • Sản phẩm Khuếch đạiMLFlowStack ngăn xếp thực hiện hành động sau:
    • Tạo một ứng dụng được liên kết với kho lưu trữ MLflow đã vá lỗi trong Cam kết mã AWS để xây dựng và triển khai giao diện người dùng MLflow.
  • Sản phẩm SageMakerStudioNgười dùngStack ngăn xếp thực hiện các hành động sau:
    • Triển khai miền Studio (nếu miền chưa tồn tại).
    • Thêm ba người dùng, mỗi người có vai trò thực thi SageMaker khác nhau thực hiện một cấp độ truy cập khác nhau:
      • quản trị mlflow – Có quyền giống như quản trị viên đối với bất kỳ tài nguyên MLflow nào.
      • trình đọc mlflow – Có quyền quản trị chỉ đọc đối với bất kỳ tài nguyên MLflow nào.
      • người phê duyệt mô hình mlflow – Có các quyền tương tự như trình đọc mlflow, ngoài ra có thể đăng ký các mô hình mới từ các lần chạy hiện có trong MLflow và thăng cấp các mô hình đã đăng ký hiện có lên các giai đoạn mới.

Triển khai máy chủ theo dõi MLflow trên kiến ​​trúc serverless

Mục tiêu của chúng tôi là triển khai máy chủ theo dõi MLflow đáng tin cậy, có tính sẵn sàng cao, tiết kiệm chi phí và an toàn. Các công nghệ không có máy chủ là ứng cử viên hoàn hảo để đáp ứng tất cả các yêu cầu này với chi phí hoạt động tối thiểu. Để đạt được điều đó, chúng tôi xây dựng hình ảnh bộ chứa Docker cho máy chủ theo dõi thử nghiệm MLflow và chúng tôi chạy hình ảnh đó trên AWS Fargate trên Amazon ECS trong VPC chuyên dụng chạy trên mạng con riêng tư. MLflow dựa vào hai thành phần lưu trữ: kho lưu trữ phụ trợ và kho lưu trữ tạo tác. Đối với cửa hàng phụ trợ, chúng tôi sử dụng Aurora Serverless và đối với cửa hàng cấu phần phần mềm, chúng tôi sử dụng Amazon S3. Đối với kiến ​​trúc cấp cao, hãy tham khảo Tình huống 4: MLflow với Máy chủ theo dõi từ xa, kho lưu trữ phụ trợ và tạo tác. Chi tiết mở rộng về cách thực hiện tác vụ này có thể được tìm thấy trong repo GitHub sau: Quản lý vòng đời máy học của bạn với MLflow và Amazon SageMaker.

Bảo mật MLflow qua API Gateway

Tại thời điểm này, chúng tôi vẫn chưa có cơ chế kiểm soát truy cập. Ở bước đầu tiên, chúng tôi đưa MLflow ra thế giới bên ngoài bằng cách sử dụng AWS PrivateLink, liên kết này thiết lập kết nối riêng giữa VPC và các dịch vụ AWS khác, trong trường hợp của chúng tôi là API Gateway. Các yêu cầu đến MLflow sau đó được ủy quyền thông qua một Cổng API REST, cho chúng tôi khả năng triển khai một số cơ chế để cho phép các yêu cầu đến. Đối với mục đích của chúng tôi, chúng tôi chỉ tập trung vào hai:

  • Sử dụng trình ủy quyền IAM - Với người ủy quyền IAM, người yêu cầu phải được chỉ định chính sách IAM phù hợp để truy cập tài nguyên Cổng API. Mọi yêu cầu phải thêm thông tin xác thực vào các yêu cầu được gửi qua HTTP bởi AWS Signature phiên bản 4.
  • Sử dụng trình ủy quyền Lambda – Điều này mang lại sự linh hoạt cao nhất vì nó để lại toàn quyền kiểm soát cách một yêu cầu có thể được ủy quyền. Cuối cùng, các Người ủy quyền Lambda phải trả về một chính sách IAM, chính sách này sẽ được API Gateway đánh giá về việc liệu yêu cầu có được cho phép hay bị từ chối hay không.

Để biết danh sách đầy đủ các cơ chế xác thực và ủy quyền được hỗ trợ trong API Gateway, hãy tham khảo Kiểm soát và quản lý quyền truy cập vào API REST trong API Gateway.

Xác thực MLflow Python SDK (người ủy quyền IAM)

Máy chủ theo dõi thử nghiệm MLflow triển khai một REST API để tương tác theo cách có lập trình với các tài nguyên và hiện vật. MLflow Python SDK cung cấp một cách thuận tiện để ghi lại các số liệu, lần chạy và tạo phẩm, đồng thời SDK này giao tiếp với các tài nguyên API được lưu trữ trong không gian tên <MLflow-Tracking-Server-URI>/api/. Chúng tôi định cấu hình Cổng API để sử dụng trình ủy quyền IAM để kiểm soát quyền truy cập tài nguyên trên không gian tên này, do đó yêu cầu mọi yêu cầu phải được ký bằng AWS Signature Phiên bản 4.

Để tạo thuận lợi cho quá trình ký yêu cầu, bắt đầu từ MLflow 1.30.0, khả năng này có thể được kích hoạt liền mạch. Hãy chắc chắn rằng requests_auth_aws_sigv4 thư viện được cài đặt trong hệ thống và đặt MLFLOW_TRACKING_AWS_SIGV4 môi trường biến thành True. Thông tin thêm có thể được tìm thấy trong tài liệu MLflow chính thức.

Tại thời điểm này, MLflow SDK chỉ cần thông tin đăng nhập AWS. Bởi vì request_auth_aws_sigv4 sử dụng boto3 để truy xuất thông tin đăng nhập, chúng tôi biết rằng nó có thể tải thông tin xác thực từ siêu dữ liệu cá thể khi một vai trò IAM được liên kết với một Đám mây điện toán đàn hồi Amazon (Amazon EC2) (để biết các cách khác để cung cấp thông tin đăng nhập cho Boto3, hãy xem Credentials). Điều này có nghĩa là nó cũng có thể tải thông tin xác thực AWS khi chạy từ một phiên bản được quản lý bởi SageMaker từ vai trò thực thi được liên kết, như sẽ thảo luận sau trong bài đăng này.

Định cấu hình chính sách IAM để truy cập API MLflow qua API Gateway

Bạn có thể sử dụng vai trò và chính sách IAM để kiểm soát ai có thể gọi tài nguyên trên API Gateway. Để biết thêm chi tiết và tuyên bố tham chiếu chính sách IAM, hãy tham khảo Kiểm soát quyền truy cập để gọi một API.

Đoạn mã sau hiển thị một chính sách IAM ví dụ cấp quyền cho người gọi đối với tất cả các phương thức trên tất cả các tài nguyên trên MLflow che chắn Cổng API, trên thực tế cấp cho quản trị viên quyền truy cập vào máy chủ MLflow:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/*/*",
      "Effect": "Allow"
    }
  ]
}

Nếu chúng tôi muốn một chính sách cho phép người dùng truy cập chỉ đọc vào tất cả các tài nguyên, thì chính sách IAM sẽ giống như mã sau:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/GET/*",
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/runs/search/",
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/experiments/search",
       ],
       "Effect": "Allow"
     }
  ]
}

Một ví dụ khác có thể là chính sách cấp cho người dùng cụ thể quyền đăng ký mô hình vào cơ quan đăng ký mô hình và thăng cấp chúng sau này cho các giai đoạn cụ thể (dàn dựng, sản xuất, v.v.):

{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/GET/*", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/runs/search/", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/experiments/search", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/model-versions/*", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/registered-models/*" ], "Effect": "Allow" } ]
}

Xác thực giao diện người dùng MLflow (người ủy quyền Lambda)

Quyền truy cập của trình duyệt vào máy chủ MLflow được xử lý bởi giao diện người dùng MLflow được triển khai với React. Giao diện người dùng MLflow chưa được thiết kế để hỗ trợ người dùng được xác thực. Việc triển khai một quy trình đăng nhập mạnh mẽ có thể là một nhiệm vụ khó khăn, nhưng may mắn là chúng ta có thể dựa vào Khuếch đại các thành phần UI React để xác thực, giúp giảm đáng kể nỗ lực tạo luồng đăng nhập trong ứng dụng React, sử dụng Amazon Cognito cho kho lưu trữ danh tính.

Amazon Cognito cho phép chúng tôi quản lý cơ sở người dùng của riêng mình và cũng hỗ trợ liên kết nhận dạng bên thứ ba, làm cho việc xây dựng, ví dụ, liên kết ADFS trở nên khả thi (xem Xây dựng Liên kết ADFS cho Ứng dụng web của bạn bằng Nhóm người dùng Amazon Cognito để biết thêm chi tiết). Mã thông báo do Amazon Cognito phát hành phải được xác minh trên API Gateway. Chỉ xác minh mã thông báo là không đủ để kiểm soát quyền truy cập chi tiết, do đó, trình ủy quyền Lambda cho phép chúng tôi linh hoạt triển khai logic mà chúng tôi cần. Sau đó, chúng tôi có thể xây dựng trình ủy quyền Lambda của riêng mình để xác minh mã thông báo JWT và tạo các chính sách IAM để cho phép Cổng API từ chối hoặc cho phép yêu cầu. Sơ đồ sau đây minh họa luồng đăng nhập MLflow.

Các bước xác thực giao diện người dùng MLflow

Để biết thêm thông tin về các thay đổi mã thực tế, hãy tham khảo tệp vá lỗi nhận thức.patch, áp dụng cho MLflow phiên bản 2.3.1.

Bản vá này giới thiệu hai khả năng:

  • Thêm các thành phần Amplify UI và định cấu hình chi tiết Amazon Cognito thông qua các biến môi trường triển khai quy trình đăng nhập
  • Trích xuất JWT từ phiên và tạo tiêu đề Ủy quyền với mã thông báo mang về nơi gửi JWT

Mặc dù việc duy trì mã phân kỳ từ thượng nguồn luôn phức tạp hơn so với việc dựa vào ngược dòng, nhưng điều đáng chú ý là các thay đổi là tối thiểu vì chúng tôi dựa vào các thành phần UI Amplify React.

Với quy trình đăng nhập mới đã sẵn sàng, hãy tạo bản dựng sản xuất cho giao diện người dùng MLflow cập nhật của chúng tôi. Dịch vụ lưu trữ AWS Amplify là một dịch vụ AWS cung cấp quy trình làm việc dựa trên git cho CI/CD và lưu trữ ứng dụng web. Bước xây dựng trong đường ống được xác định bởi buildspec.yaml, nơi chúng tôi có thể thêm dưới dạng các biến môi trường thông tin chi tiết về ID nhóm người dùng Amazon Cognito, ID nhóm nhận dạng Amazon Cognito và ID ứng dụng khách nhóm người dùng mà thành phần Amplify UI React cần để định cấu hình quy trình xác thực. Đoạn mã sau đây là một ví dụ về buildspec.yaml tập tin:

version: "1.0"
applications: - frontend: phases: preBuild: commands: - fallocate -l 4G /swapfile - chmod 600 /swapfile - mkswap /swapfile - swapon /swapfile - swapon -s - yarn install build: commands: - echo "REACT_APP_REGION=$REACT_APP_REGION" >> .env - echo "REACT_APP_COGNITO_USER_POOL_ID=$REACT_APP_COGNITO_USER_POOL_ID" >> .env - echo "REACT_APP_COGNITO_IDENTITY_POOL_ID=$REACT_APP_COGNITO_IDENTITY_POOL_ID" >> .env - echo "REACT_APP_COGNITO_USER_POOL_CLIENT_ID=$REACT_APP_COGNITO_USER_POOL_CLIENT_ID" >> .env - yarn run build artifacts: baseDirectory: build files: - "**/*"

Ghi lại các thử nghiệm một cách an toàn và chạy bằng cách sử dụng vai trò thực thi SageMaker

Một trong những khía cạnh chính của giải pháp được thảo luận ở đây là tích hợp an toàn với SageMaker. SageMaker là một dịch vụ được quản lý và do đó, dịch vụ này thay mặt bạn thực hiện các hoạt động. Những gì SageMaker được phép thực hiện được xác định bởi chính sách IAM gắn với vai trò thực thi mà bạn liên kết với công việc đào tạo SageMaker hoặc bạn liên kết với hồ sơ người dùng làm việc từ Studio. Để biết thêm thông tin về vai trò thực thi SageMaker, hãy tham khảo Vai trò của SageMaker.

Bằng cách định cấu hình Cổng API để sử dụng xác thực IAM trên <MLFlow-Tracking-Server-URI>/api/* tài nguyên, chúng ta có thể xác định một tập hợp các chính sách IAM trên vai trò thực thi SageMaker sẽ cho phép SageMaker tương tác với MLflow theo cấp độ truy cập được chỉ định.

Khi thiết lập MLFLOW_TRACKING_AWS_SIGV4 môi trường biến thành True trong khi làm việc trong Studio hoặc trong công việc đào tạo SageMaker, MLflow Python SDK sẽ tự động ký tất cả các yêu cầu, yêu cầu này sẽ được xác thực bởi Cổng API:

os.environ['MLFLOW_TRACKING_AWS_SIGV4'] = "True"
mlflow.set_tracking_uri(tracking_uri)
mlflow.set_experiment(experiment_name)

Kiểm tra vai trò thực thi SageMaker với MLflow SDK

Nếu bạn truy cập miền Studio đã được tạo, bạn sẽ tìm thấy ba người dùng:

  • quản trị mlflow – Được liên kết với vai trò thực thi có quyền tương tự như người dùng trong quản trị viên nhóm Amazon Cognito
  • trình đọc mlflow – Được liên kết với vai trò thực thi có quyền tương tự như người dùng trong trình đọc nhóm Amazon Cognito
  • người phê duyệt mô hình mlflow – Được liên kết với vai trò thực thi có quyền tương tự như người dùng trong nhóm người phê duyệt mô hình nhóm Amazon Cognito

Để kiểm tra ba vai trò khác nhau, hãy tham khảo các phòng thí nghiệm được cung cấp như một phần của mẫu này trên mỗi hồ sơ người dùng.

Sơ đồ sau đây minh họa quy trình làm việc cho hồ sơ người dùng Studio và xác thực công việc SageMaker bằng MLflow.

SageMaker đăng nhập vào MLflow

Tương tự, khi chạy các công việc SageMaker trên cơ sở hạ tầng do SageMaker quản lý, nếu bạn đặt biến môi trường MLFLOW_TRACKING_AWS_SIGV4 đến Truevà vai trò thực thi SageMaker được chuyển cho công việc có chính sách IAM chính xác để truy cập Cổng API, bạn có thể tương tác an toàn với máy chủ theo dõi MLflow của mình mà không cần phải tự quản lý thông tin đăng nhập. Khi chạy các công việc đào tạo SageMaker và khởi tạo một lớp công cụ ước tính, bạn có thể chuyển các biến môi trường mà SageMaker sẽ đưa vào và cung cấp biến đó cho tập lệnh đào tạo, như được hiển thị trong đoạn mã sau:

environment={ "AWS_DEFAULT_REGION": region, "MLFLOW_EXPERIMENT_NAME": experiment_name, "MLFLOW_TRACKING_URI": tracking_uri, "MLFLOW_AMPLIFY_UI_URI": mlflow_amplify_ui, "MLFLOW_TRACKING_AWS_SIGV4": "true", "MLFLOW_USER": user
} 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='1.0-1', base_job_name='mlflow', environment=environment
)

Trực quan hóa các lần chạy và thử nghiệm từ giao diện người dùng MLflow

Sau khi quá trình triển khai đầu tiên hoàn tất, hãy điền nhóm người dùng Amazon Cognito với ba người dùng, mỗi người thuộc một nhóm khác nhau, để kiểm tra các quyền mà chúng ta đã triển khai. Bạn có thể sử dụng tập lệnh này add_users_and_groups.py để gieo nhóm người dùng. Sau khi chạy tập lệnh, nếu kiểm tra nhóm người dùng Amazon Cognito trên bảng điều khiển Amazon Cognito, bạn sẽ thấy ba người dùng đã được tạo.

Người dùng nhận thức

Về phía REST API Gateway, trước tiên, người ủy quyền Lambda sẽ xác minh chữ ký của mã thông báo bằng cách sử dụng khóa nhóm người dùng Amazon Cognito và xác minh các xác nhận quyền sở hữu. Chỉ sau đó, nó mới trích xuất nhóm Amazon Cognito mà người dùng thuộc về từ xác nhận quyền sở hữu trong mã thông báo JWT (cognito:groups) và áp dụng các quyền khác nhau dựa trên nhóm mà chúng tôi đã lập trình.

Đối với trường hợp cụ thể của chúng tôi, chúng tôi có ba nhóm:

  • quản trị viên – Có thể xem và có thể chỉnh sửa mọi thứ
  • độc giả - Chỉ có thể nhìn thấy mọi thứ
  • người phê duyệt mô hình – Giống như người đọc, ngoài ra có thể đăng ký mô hình, tạo phiên bản và thăng cấp phiên bản mô hình lên giai đoạn tiếp theo

Tùy thuộc vào nhóm, trình ủy quyền Lambda sẽ tạo các chính sách IAM khác nhau. Đây chỉ là một ví dụ về cách đạt được sự cho phép; với trình ủy quyền Lambda, bạn có thể triển khai bất kỳ logic nào mình cần. Chúng tôi đã chọn xây dựng chính sách IAM trong thời gian chạy trong chính hàm Lambda; tuy nhiên, bạn có thể tạo trước các chính sách IAM thích hợp, lưu trữ chúng trong Máy phát điện Amazonvà truy xuất chúng trong thời gian chạy theo logic nghiệp vụ của riêng bạn. Tuy nhiên, nếu bạn chỉ muốn hạn chế một tập hợp con các hành động, bạn cần lưu ý về Định nghĩa API MLflow REST.

Bạn có thể khám phá mã cho trình ủy quyền Lambda trên Repo GitHub.

Cân nhắc nhiều tài khoản

Quy trình công việc khoa học dữ liệu phải trải qua nhiều giai đoạn khi chúng chuyển từ thử nghiệm sang sản xuất. Một cách tiếp cận phổ biến bao gồm các tài khoản riêng biệt dành riêng cho các giai đoạn khác nhau của quy trình AI/ML (thử nghiệm, phát triển và sản xuất). Tuy nhiên, đôi khi bạn nên có một tài khoản chuyên dụng đóng vai trò là kho lưu trữ trung tâm cho các mô hình. Mặc dù kiến ​​trúc và mẫu của chúng tôi đề cập đến một tài khoản duy nhất, nó có thể dễ dàng mở rộng để thực hiện kịch bản cuối cùng này, nhờ vào Khả năng IAM để chuyển đổi vai trò thậm chí trên các tài khoản.

Sơ đồ sau đây minh họa một kiến ​​trúc sử dụng MLflow làm kho lưu trữ trung tâm trong tài khoản AWS bị cô lập.

MLflow sagemaker đa tài khoản

Đối với trường hợp sử dụng này, chúng tôi có hai tài khoản: một cho máy chủ MLflow và một cho thử nghiệm mà nhóm khoa học dữ liệu có thể truy cập. Để cho phép truy cập nhiều tài khoản từ công việc đào tạo SageMaker đang chạy trong tài khoản khoa học dữ liệu, chúng tôi cần các yếu tố sau:

  • Vai trò thực thi SageMaker trong tài khoản AWS khoa học dữ liệu với chính sách IAM được đính kèm cho phép đảm nhận một vai trò khác trong tài khoản MLflow:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<ARN-ROLE-IN-MLFLOW-ACCOUNT>" }
}
  • Vai trò IAM trong tài khoản MLflow với chính sách IAM phù hợp được đính kèm để cấp quyền truy cập vào máy chủ theo dõi MLflow và cho phép vai trò thực thi SageMaker trong tài khoản khoa học dữ liệu đảm nhận vai trò đó:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<ARN-SAGEMAKER-EXECUTION-ROLE-IN-DATASCIENCE-ACCOUNT>" }, "Action": "sts:AssumeRole" } ]
}

Trong tập lệnh đào tạo đang chạy trong tài khoản khoa học dữ liệu, bạn có thể sử dụng ví dụ này trước khi khởi chạy ứng dụng khách MLflow. Bạn cần đảm nhận vai trò trong tài khoản MLflow và lưu trữ thông tin đăng nhập tạm thời dưới dạng biến môi trường, vì bộ thông tin đăng nhập mới này sẽ được chọn bởi một phiên Boto3 mới được khởi tạo trong ứng dụng khách MLflow.

import boto3 # Session using the SageMaker Execution Role in the Data Science Account
session = boto3.Session()
sts = session.client("sts") response = sts.assume_role( RoleArn="<ARN-ROLE-IN-MLFLOW-ACCOUNT>", RoleSessionName="AssumedMLflowAdmin"
) credentials = response['Credentials']
os.environ['AWS_ACCESS_KEY_ID'] = credentials['AccessKeyId']
os.environ['AWS_SECRET_ACCESS_KEY'] = credentials['SecretAccessKey']
os.environ['AWS_SESSION_TOKEN'] = credentials['SessionToken'] # set remote mlflow server and initialize a new boto3 session in the context
# of the assumed role
mlflow.set_tracking_uri(tracking_uri)
experiment = mlflow.set_experiment(experiment_name)

Trong ví dụ này, RoleArn là ARN của vai trò bạn muốn đảm nhận và RoleSessionName là tên mà bạn chọn cho phiên giả định. Các sts.assume_role trả về thông tin đăng nhập bảo mật tạm thời mà ứng dụng khách MLflow sẽ sử dụng để tạo ứng dụng khách mới cho vai trò được đảm nhận. Sau đó, ứng dụng khách MLflow sẽ gửi các yêu cầu đã ký tới API Gateway trong ngữ cảnh của vai trò được đảm nhận.

Kết xuất MLflow trong SageMaker Studio

SageMaker Studio dựa trên JupyterLab và giống như trong JupyterLab, bạn có thể cài đặt các tiện ích mở rộng để tăng năng suất của mình. Nhờ tính linh hoạt này, các nhà khoa học dữ liệu làm việc với MLflow và SageMaker có thể cải thiện hơn nữa khả năng tích hợp của họ bằng cách truy cập giao diện người dùng MLflow từ môi trường Studio và trực quan hóa ngay lập tức các thử nghiệm cũng như chạy nhật ký. Ảnh chụp màn hình sau đây hiển thị một ví dụ về MLflow được hiển thị trong Studio.

Khung nội tuyến MLflow trong Studio

Để biết thông tin về cách cài đặt tiện ích mở rộng JupyterLab trong Studio, hãy tham khảo Amazon SageMaker Studio và SageMaker Notebook Instance hiện đi kèm với máy tính xách tay JupyterLab 3 để tăng năng suất của nhà phát triển. Để biết chi tiết về cách thêm tự động hóa thông qua cấu hình vòng đời, hãy tham khảo Tùy chỉnh Amazon SageMaker Studio bằng cách sử dụng Cấu hình vòng đời.

Trong kho lưu trữ mẫu hỗ trợ bài đăng này, chúng tôi cung cấp hướng dẫn về cách cài đặt jupyterlab-iframe sự mở rộng. Sau khi tiện ích đã được cài đặt, bạn có thể truy cập giao diện người dùng MLflow mà không cần rời khỏi Studio bằng cách sử dụng cùng một bộ thông tin xác thực mà bạn đã lưu trữ trong nhóm người dùng Amazon Cognito.

Các bước tiếp theo

Có một số tùy chọn để mở rộng công việc này. Một ý tưởng là hợp nhất kho nhận dạng cho cả SageMaker Studio và giao diện người dùng MLflow. Một tùy chọn khác là sử dụng dịch vụ liên kết danh tính bên thứ ba với Amazon Cognito, sau đó sử dụng Trung tâm nhận dạng AWS IAM (kế thừa AWS Single Sign-On) để cấp quyền truy cập vào Studio bằng cách sử dụng cùng một danh tính bên thứ ba. Một cách khác là giới thiệu tự động hóa hoàn toàn bằng cách sử dụng Đường ống Amazon SageMaker cho phần CI/CD của quá trình xây dựng mô hình và sử dụng MLflow làm máy chủ theo dõi thử nghiệm tập trung và sổ đăng ký mô hình với khả năng quản trị mạnh mẽ, cũng như tự động hóa để tự động triển khai các mô hình đã được phê duyệt tới điểm cuối lưu trữ SageMaker.

Kết luận

Mục đích của bài đăng này là cung cấp khả năng kiểm soát truy cập cấp doanh nghiệp cho MLflow. Để đạt được điều này, chúng tôi đã tách các quy trình xác thực và ủy quyền khỏi máy chủ MLflow và chuyển chúng sang API Gateway. Chúng tôi đã sử dụng hai phương thức ủy quyền do API Gateway cung cấp, người ủy quyền IAM và người ủy quyền Lambda, để đáp ứng các yêu cầu của cả MLflow Python SDK và MLflow UI. Điều quan trọng là phải hiểu rằng người dùng ở bên ngoài MLflow, do đó, việc quản trị nhất quán yêu cầu duy trì các chính sách IAM, đặc biệt trong trường hợp có các quyền rất chi tiết. Cuối cùng, chúng tôi đã trình bày cách nâng cao trải nghiệm của các nhà khoa học dữ liệu bằng cách tích hợp MLflow vào Studio thông qua các tiện ích mở rộng đơn giản.

Tự mình thử giải pháp bằng cách truy cập Repo GitHub và cho chúng tôi biết nếu bạn có bất kỳ câu hỏi nào trong phần bình luận!

Tài nguyên bổ sung

Để biết thêm thông tin về SageMaker và MLflow, hãy xem phần sau:


Về các tác giả

Paolo Di Francesco là Kiến trúc sư giải pháp cấp cao tại Amazon Web Services (AWS). Ông có bằng Tiến sĩ về Kỹ thuật Viễn thông và có kinh nghiệm 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 ấy thích chơi bóng đá và đọc sách.

Chris Frely là Chuyên gia chính về Kiến trúc sư giải pháp cho AI và máy học tại Amazon Web Services (AWS) có trụ sở tại San Francisco, California. Anh ấy là đồng tác giả của Cuốn sách O'Reilly, "Khoa học dữ liệu trên AWS." Chris cũng là Người sáng lập nhiều cuộc gặp gỡ toàn cầu tập trung vào Apache Spark, TensorFlow, Ray và KubeFlow. Anh ấy thường xuyên phát biểu tại các hội nghị về AI và máy học trên khắp thế giới bao gồm O'Reilly AI, Hội nghị khoa học dữ liệu mở và Big Data Tây Ban Nha.

Irshad Buchh là Kiến trúc sư giải pháp chính tại Amazon Web Services (AWS). Irshad làm việc với các đối tác SI và ISV lớn của AWS Toàn cầu, đồng thời giúp họ xây dựng chiến lược đám mây và áp dụng rộng rãi nền tảng điện toán đám mây của Amazon. Irshad tương tác với CIO, CTO và Kiến trúc sư của họ, đồng thời giúp họ và khách hàng cuối của họ triển khai tầm nhìn đám mây của họ. Irshad sở hữu các cam kết chiến lược và kỹ thuật cũng như thành công cuối cùng xung quanh các dự án triển khai cụ thể, đồng thời phát triển chuyên môn sâu về công nghệ Dịch vụ web của Amazon cũng như kiến ​​thức rộng về cách các ứng dụng và dịch vụ được xây dựng bằng nền tảng Dịch vụ web của Amazon.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img