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: キャッシュ データベース、レコード非同期、スケジュールされたタスク キュー、およびその他のタスク キュー