Do nhu cầu tính toán ngày càng tăng của các thuật toán học máy, nhu cầu về các cụm máy tính mạnh mẽ ngày càng tăng. Tuy nhiên, cơ sở hạ tầng hiện có để triển khai các thuật toán học máy song song vẫn còn sơ khai. Mặc dù các giải pháp tốt cho các trường hợp sử dụng cụ thể [e. g. , máy chủ tham số hoặc tìm kiếm siêu tham số] và xử lý dữ liệu song song tồn tại [e. g. , Hadoop hoặc Spark], để song song hóa các thuật toán học máy, các học viên thường kết thúc việc xây dựng các hệ thống tùy chỉnh của riêng họ, dẫn đến nỗ lực trùng lặp
Để giúp giải quyết vấn đề này, RISELab đã tạo ra Ray, một khung thực thi phân tán hiệu suất cao. Ray hỗ trợ các ứng dụng Python phân tán và song song cho mục đích chung, đồng thời cho phép các ứng dụng học máy và học tăng cường quy mô lớn. Nó đạt được khả năng mở rộng và khả năng chịu lỗi bằng cách trừu tượng hóa trạng thái điều khiển của hệ thống trong kho lưu trữ điều khiển toàn cầu và giữ cho tất cả các thành phần khác không trạng thái. Nó sử dụng kho lưu trữ đối tượng phân tán bộ nhớ dùng chung để xử lý hiệu quả dữ liệu lớn thông qua bộ nhớ dùng chung và nó sử dụng kiến trúc lập lịch trình phân tán từ dưới lên để đạt được lập lịch trình có độ trễ thấp và thông lượng cao. Nó sử dụng API nhẹ dựa trên biểu đồ tác vụ động và tác nhân để thể hiện nhiều loại ứng dụng một cách linh hoạt
Học viện trí tuệ nhân tạo Intel® đang hợp tác với RISELab để cung cấp sức mạnh của trí tuệ nhân tạo phân tán cho các trường đại học nghiên cứu trên khắp thế giới bằng cách cung cấp tài liệu đào tạo về Ray. Một tài nguyên khác để đào tạo Ray là Intel AI DevCloud, một dịch vụ điện toán đám mây học thuật miễn phí được thiết kế cho khối lượng công việc AI. Sử dụng DevCloud, các nhà nghiên cứu và sinh viên AI có thể tạo ra các nút tính toán chạy Ray để xây dựng các mô hình AI phân tán phức tạp bằng thuật toán tiên tiến nhất để đào tạo phân tán và học tăng cường phân tán
Để thúc đẩy việc sử dụng Ray trên DevCloud trong các lớp học, chúng tôi đã chia tài liệu đào tạo do nhóm Ray tạo thành tám hướng dẫn riêng lẻ kéo dài một giờ. Chúng tôi hy vọng điều này sẽ cho phép các giáo sư từ khắp nơi trên thế giới áp dụng công nghệ tiên tiến này. Tài liệu này không chỉ bao gồm cách sử dụng và tối ưu hóa khối lượng công việc phân tán với Ray mà còn bao gồm Tune, một thư viện tối ưu hóa siêu tham số; . Các giáo sư có thể chọn mức độ chuyên sâu phù hợp với lớp học của họ, có thể thay đổi từ các bài giảng giới thiệu đến các chủ đề nâng cao
Intel AI DevCloud
Mặc dù một trong những lợi ích chính của Ray* là dễ dàng mở rộng ứng dụng từ máy tính xách tay sang trung tâm dữ liệu, nhưng việc chạy ứng dụng Ray trên quy mô lớn vẫn là một đề xuất tốn kém. Hơn nữa, nhiều người dùng không có quyền truy cập vào cụm máy tính. Để giúp giải quyết vấn đề này, Intel® đã nỗ lực hỗ trợ Ray* trên Intel® AI DevCloud, cơ sở hạ tầng đám mây AI miễn phí, cũng có sẵn thông qua Học viện AI
Kiến trúc hệ thống của DevCloud, như thể hiện trong sơ đồ bên trên, là một cụm Điện toán hiệu năng cao [HPC] có thể được truy cập thông qua một nút đăng nhập duy nhất. Nút này có thể được sử dụng để gửi công việc đến cụm bằng các lệnh PBS [Hệ thống hàng loạt di động]. Một lệnh về cơ bản bao gồm một tập lệnh bash cũng chỉ định phân bổ tài nguyên cho công việc, chẳng hạn như số lượng nút, bộ nhớ trên mỗi nút và thời gian treo tường
Bắt đầu với Ray trên DevCloud
Để dùng thử Ray trên DevCloud, hãy đăng ký tài khoản 30 ngày miễn phí tại đây. Đối với các giáo sư đang nghiên cứu hoặc giảng dạy, vui lòng liên hệ để có quyền truy cập mở rộng tại đây. Khi quyền truy cập đã được cấp, vui lòng sao chép kho lưu trữ git này để truy cập vào mã mẫu
Để chạy ví dụ này trên DevCloud, hãy thực hiện các lệnh sau sau khi tham gia phiên tương tác
ray start --head echo “” >> head_ip python py_create_workers.py 5 python a2c_train.py
Phần còn lại của phần này mô tả cách hoạt động của mã mẫu và cách hệ thống lô PBS hoạt động với Ray
Ví dụ: tập lệnh PBS sau đây gọi 1 nút có thời gian treo tường một giờ và bộ nhớ 32 GB
#!/bin/bash #PBS –l nodes=1:ppn=2 #PBS –l walltime=01:00:00 #PBS –l mem=32gb source activate my_env python my_job.py
Cài đặt gói trên DevCloud
Một điểm khác biệt khi cài đặt các gói thông qua Pip trên DevCloud là nó yêu cầu cờ –user do cấp quyền của hệ thống tệp đối với người dùng không phải quản trị viên. Lưu ý thêm, DevCloud được thiết lập để sử dụng môi trường Conda và là cách được khuyến nghị để giữ sạch các gói phụ thuộc bất cứ khi nào cài đặt thư viện mới. Để cài đặt Ray từ PyPI, hãy chạy lệnh sau
Bắt đầu một công việc Ray trên DevCloud
Để gọi một nhân viên Ray với cài đặt mặc định của một nút và 96 GB RAM, tập lệnh sau có thể được viết trong một tệp có tên create_worker. Lời kêu gọi đi ngủ là để công nhân tiếp tục hoạt động trong một giờ, nếu không công nhân sẽ khởi động nhưng sau đó sẽ bỏ cuộc ngay lập tức
ray start --redis-address 10.5.9.7:16884 sleep 3600
Thay vì phải gọi qsub create_worker nhiều lần, nó có thể được tự động hóa bằng Python với tệp có tên py_create_workers. py. Lệnh qsub được sử dụng để gửi tập lệnh PBS vào hàng đợi công việc. Lưu ý rằng thay vì gọi os. system[“qsub create_worker”], đó là đường dẫn tệp đầy đủ của qsub vì đường dẫn hệ thống không thể tìm thấy qsub khi ở chế độ tương tác do đường dẫn hệ thống cho các nút tính toán
import sys import os for i in range[int[sys.argv[1]]]: os.system['/usr/local/bin/qsub create_worker']
Để đảm bảo rằng các nút khác được kết nối với nút đầu, tập lệnh sau có tên get_ip_addresses. py có thể được sử dụng để kiểm tra số lượng nút. Lưu ý rằng sẽ có sáu nút trong ví dụ này vì có năm nút công nhân và một nút đầu. DevCloud hiện chỉ cho phép tối đa năm công việc đang chạy cho mỗi người dùng thông qua hệ thống xếp hàng qsub, cho phép người dùng truy cập vào tổng số 144 CPU và 576 GB RAM
import ray import time import sys import os ray.init[redis_address="10.5.9.7:16884"] @ray.remote def f[]: time.sleep[0.01] return ray.services.get_node_ip_address[] while True: ips = set[ray.get[[f.remote[] for _ in range[1000]]]] print[ips] print[len[ips]] time.sleep[1]
Chạy khối lượng công việc RL
Một tác nhân A2C có thể được đào tạo để tìm hiểu SpaceInvaders bằng API Python RLlib trong tập lệnh có tên a2c_train. py. Cấu hình phần cứng mặc định phải được thay đổi do không có GPU trên DevCloud và RLlib thường có GPU trên nút đào tạo trong khi các nút CPU khác đang thực hiện triển khai
import ray import ray.rllib.agents.a3c as a3c from ray.tune.logger import pretty_print ray.init[redis_address="10.5.9.7:16884"] config = a3c.DEFAULT_CONFIG.copy[] config["num_gpus"] = 0 config["num_gpus_per_worker"] = 0 config["num_workers"] = 5 agent = a3c.A2CAgent[config=config, env="SpaceInvadersNoFrameskip-v4"] for i in range[1000]: result = agent.train[] print[pretty_print[result]] if i % 100 == 0: checkpoint = agent.save[] print["checkpoint saved at", checkpoint]
Trước khi gọi ray start, một phiên tương tác phải được bắt đầu vì khối lượng công việc không thể chạy trên nút đăng nhập. Chạy qsub –I –lselect=1 sẽ gọi một công việc tương tác trên một nút tính toán. Lưu ý rằng nó sẽ nói rằng nó nằm trên nút c009-n003 hoặc id nút tương tự khác thay vì chỉ nút đăng nhập, nghĩa là nó đã chuyển từ nút đăng nhập sang nút tính toán
Bây giờ một nút tính toán đang được sử dụng, nút đầu có thể được thiết lập trên nút mới này. Hãy nhớ sử dụng cùng một địa chỉ IP ở đầu ra khi kết nối worker với nút đầu này
Sau đó gọi py_create_workers. py để tự động thêm 5 công nhân. Các số sau đó là ID công việc của các công việc riêng lẻ mà mỗi công nhân Ray đang chạy
Sử dụng get_nodes_addresses. py được hiển thị trước đó, có thể kiểm tra kết nối giữa nút đầu và nút worker để nhận số lượng địa chỉ IP duy nhất dự kiến
Bây giờ, khi a2c_train. py được thực thi, nó có thể được phân phối trên năm nút DevCloud khác bằng Ray. Trong ví dụ đơn giản này, năm nút là không cần thiết vì trong ray/python/ray/rllib/agents/agent. py, cấu hình chung cho số lượng CPU trên mỗi công nhân chỉ là một cũng như các CPU cần thiết được phân bổ cho trình điều khiển. Tuy nhiên, với ví dụ đơn giản này, người dùng có thể thử nghiệm sử dụng nhiều CPU, môi trường, số lượng nhân viên A2C và quy mô lô đào tạo để có được hiệu suất tốt hơn