クラウド ネイティブ機械学習プラットフォーム cube-studio オープンソース プロジェクトとコードの簡単な紹介

1. cube-studioの紹介

クラウドネイティブ機械学習プラットフォーム cube-studio の紹介: https://juejin.cn/column/7084516480871563272

cube-studio は、オープンソースのクラウドネイティブ機械学習プラットフォームで、現在、オンライン/オフライン機能をサポートする機能プラットフォーム、構造データとメディア アノテーション データ管理をサポートするデータ ソース管理、オンライン開発、オンライン vscode/jupyter コード開発、およびオンライン開発をサポートする機能プラットフォームが含まれています。およびオンライン イメージ デバッグ。dockerfile を使用しない増分構築をサポート、タスク フロー オーケストレーション、オンライン ドラッグ アンド ドロップ、オープン テンプレート フレームワーク、tf/pytorch/spark/ray/horovod/kaldi などの分散トレーニング タスクをサポート、単一ノード デバッグタスク、分散タスク バッチ優先スケジューリング、集約ログ、タスク実行リソースの監視、アラーム、スケジュールされたスケジューリング、補足記録のサポート、無視、再試行、依存関係、同時実行制限、スケジュールされたタスクのコンピューティング能力のインテリジェントな修正、nni、katib、のスーパー パラメータ検索ray、マルチクラスター マルチリソース グループ、コンピューティング能力調整、フェデレーション スケジューリング、tf/pytorch/onnx モデルの推論サービス、サーバーレス トラフィック制御、tensorrt GPU 推論アクセラレーション、GPU 使用率/QPS およびその他の指標に基づく hpa 機能、仮想化 GPU 、仮想ビデオ メモリおよびその他のサービス機能。

現在、cube-studio は Tencent Music によって github にオープンソース化されています: https://github.com/tencentmusic/cube-studio

オープンソースの試用環境: http://114.96.98.168:20080/frontend/Account admin パスワード admin

2. オープンソースコードのフレームワークと構造

プラットフォーム制御側は、Flask フレームワークをベースにした fab-Python フレームワークです。まず Flask フレームワークを理解することができます。

2.1 データベース関連のコード

2.1.1 データベース構造

図に示すように、データベース構造は myapp/models に保存されます。
ここに画像の説明を挿入します

2.1.2 データベースの初期化

ここに画像の説明を挿入します

図に示すように、データベースへの書き込みは cli.py で初期化され、データ操作は db.session を通じて実行されます。

2.1.3 データベース更新の反復

反復バージョン ファイルは myapp/migrations/versions
1 にあります。まず、myapp db upgrade コマンドを使用して、versions ディレクトリ内のインターフェイスに従ってデータベースを最新に更新します。

2. 次に、myapp db Migrate は、コード内の最新のインターフェイスを version ディレクトリに更新します。

3. 次に、myapp db upgrade コマンドを呼び出して、データベースを最新バージョンに更新します。
ここに画像の説明を挿入します

2.2 バックエンドインターフェースの概要

2.2.1 バックエンドコードの概要

ここに画像の説明を挿入します
ここに画像の説明を挿入します

図に示すように、クラスを定義し、route_base 基本ルートを設定し、@expose で特定の API インターフェイスとrestful メソッドを定義し、appbuilder.add_api でクラスを追加することで、バックエンド インターフェイスを定義できます。

	#所有api操作header
    headers = {
    
    
      'Content-Type': 'application/json',
      'Authorization': '$rtx|$token'
    }
 - api:(GET):http://x.x.x.x/$view/api/
	#获取当前view 增删改查搜索接口中需要发送的参数,以及参数的描述
 - api: (GET):http://xx.xx.xx.xx/$view/api/_info 
 #list接口,其中$value为json序列化后的字符串
 - api: (GET):http:/xxx/api/?form_data=$value
 
 - api:(POST):http://x.x.x.x/$view/api/

 - api:(PUT):http://x.x.x.x/$view/api/<id>

 - api:(GET):http://x.x.x.x/$view/api/<id>

 - api:(DELETE):http://x.x.x.x/$view/api/<id>

	#单数据操作
 - api:(GET):http://x.x.x.x/$view/api/action/$action_name/<id>
	#批数据操作
 - api:(POST):http://x.x.x.x/$view/api/multi_action/$action_name/
	json参数为{
    
    "ids":[xx,xx,xx]}

2.2.2 インターフェースフィルタ機能

过滤函数:
Starts with:sw
Not Starts with:nsw
Ends with:ew
Not Ends with:new
Contains:ct
Not Contains:nct
Equal to:eq
Not Equal to:neq
Greater than:gt
Smaller than:lt
Relation:rel_o_m
No Relation:nrel_o_m
elation as Many:rel_m_m
Filter view with a function:eqf
Filter view where field is in a list returned by a function:inf

#filter示例:
#查询name列包含aa的记录
"filters":[
	{
    
    
	  "col": "name",
	  "opr": "ct",   
	  "value": "aa"
	}
]
#filter示例:
#a表通过外键b_id绑定b表,查询指定b_id为1的所有a
"filters":[
    {
    
    
        "col": "b",
        "opr": "rel_o_m",
        "value": 1
    }
]

# 分页
"page":0,
"page_size":10,

# 排序
order_column: $column1
order_direction: 'desc'

2.2.3 celeryのスケジュールされた/非同期タスクの開発

  • スケジュールされたタスクのコード開発: myapp/tasks/schedules.py
    ここに画像の説明を挿入します

    使用シナリオ: 1. スケジュールされたタスク (古いワークフロー、tfjob、pytorchjob、テスト タスク、サービス、ノートブックなどの定期的な削除など)。スケジュールされたタスクの構成を定期的に送信し、GPU リソースを監視し、複数のプロジェクト グループ間でリソースを割り当てます。

  • 非同期タスクコード開発: myapp/tasks/async_task.py

    使用シナリオ: 1. 非同期タスク、グレースケール アップグレード サービス、イメージの構築など、完了までに長時間かかる機能。

  • タスク構成: config.py の CeleryConfigここに画像の説明を挿入します

2.2.4 crdの変更を監視する

ここに画像の説明を挿入します

コード開発: myapp/tools/watch_xx.py
ここに画像の説明を挿入します

使用シナリオ: トレーニングおよび推論ワークフローのステータス変化を監視し、メッセージをプッシュし、Redis キャッシュを介してタスク キューを記録します。

2.2.5 k8s 関連コンポーネントの呼び出し

ここに画像の説明を挿入します

3. プロジェクトの運営

3.1 ローカル操作

ローカルで実行するには、主に 2 つの設定ファイル mysql-compose.yml と docker-compose.yml が必要です
ここに画像の説明を挿入します
1. ローカル docker を起動します Windows では docker-desktop を有効にすることができます。

2 mysqlデータベースを実行します

cd ./install/docker目录下执行 docker-compose -f .\mysql-compose.yml up

3.フロントエンドとバックエンドのイメージを構築します。

  • フロントエンド イメージ dockerfile: install/docker/dockerFrontend/Dockerfileここに画像の説明を挿入します

  • バックエンド イメージ dockerfile: install/docker/Dockerfile.dashboardここに画像の説明を挿入します

4. /install/docker/docker-compose.yml 内のフロントエンドとバックエンドのイメージを変更し、docker-compose を実行すると、ブラウザーで http://localhost:8888/frontend ページが表示されます。

docker-compose -f /install/docker/docker-compose.yml up

3.2 コンテナの実行

3.2.1 インフラ名前空間

ここに画像の説明を挿入します
上の図に示すように:
kubeflow-dashboard: バックエンド コンテナー
kubeflow-dashboard-frontend: フロントエンド コンテナー
kubeflow-dashboard-schedule: 非同期、スケジュール済み、その他のタスク スケジューリング コンテナー
kubeflow-dashboard-worker: 非同期、スケジュール済み、その他タスク作業コンテナ
kubeflow-watch: crd およびその他の監視コンテナ
mysql: データベース
redis: キャッシュ データベース、レコード非同期、スケジュールされたタスク キュー、およびその他のタスク キュー

3.2.2 kubeflow 名前空間

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_45808700/article/details/135147375