本文介紹如何使用阿里雲Lindorm的RAY資源群組,通過準備環境、提交作業處理資料並上傳結果,提供作業狀態監控與日誌查看等功能。
RAY資源群組目前處於邀測階段,如有使用需求,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)申請使用名額。
前提條件
-
已開通Lindorm寬表引擎。
-
已開通Lindorm計算引擎。
已開通RAY資源群組。
已將用戶端IP地址添加至Lindorm白名單。
準備工作
登入Lindorm管理主控台。在左上方選擇執行個體所屬的地區。在实例列表頁,單擊目標執行個體ID或者目標執行個體所在行操作列的管理。
-
在实例详情頁的配置信息地區,單擊计算引擎操作列的资源组管理。
在资源组详情介面,將滑鼠移至上方在RAY資源群組操作列的WebUI之上,擷取資源群組的WebUI地址,例如:
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/。在用戶端安裝RAY Client。以Python3為例,執行
pip3 install ray[default]安裝RAY Client。說明安裝後,可執行
ray --version驗證是否安裝成功。
RAY資源群組鑒權
Ray資源群組使用計算引擎token進行身份認證,以防止未授權的用戶端訪問叢集API和提交作業。
token擷取方式:用於進行計算資源鑒權的token。
通過Ray命令列管理作業鑒權配置
Ray 資源群組提供 2 種方式在命令列中配置鑒權。
方法一:在命令列中通過 --headers 參數傳遞 token。
ray job submit \ --address "http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/" \ --headers '{"Authorization": "Bearer xxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx"}' \ --runtime-env-json '{"working_dir": "."}' \ -- python yourRayJob.py方法二:設定 RAY_AUTH_MODE + RAY_AUTH_TOKEN 環境變數。
export RAY_AUTH_MODE=token export RAY_AUTH_TOKEN=xxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx ray job submit \ --address "http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/" \ --runtime-env-json '{"working_dir": "."}' \ -- python yourRayJob.py說明此方式需滿足RAY用戶端版本號碼不低於2.52.0。
Ray Dashboard 鑒權配置
首次訪問 Ray 資源群組 WebUI 地址時,需要填寫 token 配置以獲得存取權限。
提交RAY作業
在用戶端準備RAY作業。
本文以使用RAY資源群組處理阿里雲Object Storage Service服務OSS中
test-bucket空間下的test-data檔案為例,展示如何編寫指令碼處理OSS資料,並上傳結果至OSS。以下是用戶端ray_job_test目錄下編寫的RAY作業邏輯指令碼ray-oss-example.py。import ray import sys from ossfs import OSSFileSystem import tempfile import ossfs ray.init() @ray.remote def process(oss_key: str, oss_secret: str, filename: str): print("Processing %s" % filename) fs = oss_filesystem(oss_key, oss_secret) # Download to local tmp_filename = tempfile.NamedTemporaryFile(delete=False).name fs.get_file(filename, tmp_filename) print("tmp file name is %s" % tmp_filename) with open(tmp_filename, 'rb') as f: content = f.read() print(content) # Put to OSS result_remote_filename = f"{filename}_result" fs.put_file(tmp_filename, result_remote_filename) return "success" def oss_filesystem(oss_key: str, oss_secret: str) -> OSSFileSystem: return ossfs.OSSFileSystem( endpoint="oss-cn-hangzhou-internal.aliyuncs.com", # OSS Endpoint key=oss_key, secret=oss_secret ) if __name__ == "__main__": if (len(sys.argv) < 2): raise ValueError("python %s oss_key oss_secret" % __file__) oss_key = sys.argv[1] oss_secret = sys.argv[2] base = "/test-bucket/test-data/" # /<bucketname>/path fs = oss_filesystem(oss_key, oss_secret) files = [item['name'] for item in fs.ls(base) if item['name'] != base] for file in files: print("Head processing %s" % file) result = ray.get(process.remote(oss_key, oss_secret, file)) print(f"{file} is processed, status is {result}") ray.shutdown()參數說明
參數
樣本
說明
endpoint
oss-cn-hangzhou-internal.aliyuncs.comOSS的Endpoint。擷取Endpoint,請參見地區和Endpoint。
base
/test-bucket/test-data/需要處理的 OSS 檔案路徑。
提交作業到指定RAY資源群組。
進入作業所在路徑:執行
cd ray_job_test。提交作業:執行
ray job submit --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --runtime-env-json '{"working_dir": "."}' --address RAY_ADDRESS -- python my_job.py oss_key oss_secret。參數說明
參數
樣本
說明
RAY_ADDRESS
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/指定RAY資源群組的WebUI訪問地址。
my_job.py
ray-oss-example.py執行指令檔名。
oss_key
yourAccessKeyID訪問OSS檔案的阿里雲帳號或RAM使用者的AccessKey ID和 AccessKey Secret。如何擷取AccessKey ID和AccessKey Secret,請參見擷取AccessKey。
oss_secret
yourAccessKeySecretRAY_AUTH_TOKEN
8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2
RAY資源群組鑒權所需token。
樣本
ray job submit --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --runtime-env-json '{"pip": ["ossfs"], "working_dir": "."}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ -- python ray-oss-example.py yourAccessKeyID yourAccessKeySecret返回已提交作業的
SUBMISSION_ID,如raysubmit_gmSnPSFqmEXG****,查看作業狀態命令列中需使用該參數。
查看作業運行狀態
您可以在瀏覽器中訪問RAY資源群組的WebUI地址,通過RAY Dashboard即時監控作業運行狀態、作業日誌和作業列表。
作業營運
Ray支援通過不同的方式查看、管理作業:
命令列方式:Ray提供ray job子命令用於查看、管理作業,詳情可參考Ray Jobs CLI API。
Python SDK方式:Ray 提供python lib,支援通過JobSubmissionClient來查看、管理作業,詳情可參考Python SDK API。
REST API方式:Ray提供REST API,通過HTTP請求調用查看、管理作業。詳情可參考Ray Jobs REST API。
說明請使用WebUI地址作為REST API入口URL來訪問Ray REST API。
下面以用戶端命令列為例,展示如何查看、管理作業。
查看作業運行狀態。
ray job status --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID樣本:
ray job status --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****查看作業日誌。
ray job logs --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID樣本:
ray job logs --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****查看作業列表。
ray job list --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS樣本:
ray job list --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/終止作業。
ray job stop --headers '{"Authorization": "Bearer RAY_AUTH_TOKEN"}' --address RAY_ADDRESS SUBMISSION_ID樣本:
ray job stop --headers '{"Authorization": "Bearer 8f2e1a3c-9b4d-4e5f-a6c2-d7b8f9e0a1b2"}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****