Eine kurze Einführung in das Open-Source-Projekt und den Code der Cloud-nativen Plattform für maschinelles Lernen Cube-Studio

1. Cube-Studio-Einführung

Einführung in die Cloud-native Plattform für maschinelles Lernen Cube-Studio: https://juejin.cn/column/7084516480871563272

Cube-Studio ist eine cloudnative Open-Source-Plattform für maschinelles Lernen. Derzeit umfasst es eine Feature-Plattform, die Online-/Offline-Funktionen unterstützt; Datenquellenverwaltung, die Strukturdaten und Medienanmerkungsdatenverwaltung unterstützt; Online-Entwicklung, Online-Vscode/Jupyter-Code-Entwicklung; und Online-Image-Debugging. , unterstützt Dockerfile-freie, inkrementelle Konstruktion; Taskflow-Orchestrierung, Online-Drag & Drop; Open-Template-Framework, unterstützt verteilte Trainingsaufgaben wie tf/pytorch/spark/ray/horovod/kaldi; Single-Node-Debugging von Aufgaben, verteilte Aufgaben, Batch-Prioritätsplanung, Aggregationsprotokolle; Ressourcenüberwachung für Aufgabenausführung, Alarmierung; geplante Planung, Unterstützung zusätzlicher Aufzeichnung, Ignorieren, Wiederholen, Abhängigkeit, Parallelitätslimit, intelligente Korrektur der Rechenleistung geplanter Aufgaben; Super-Parametersuche von nni, katib, ray; Multi-Cluster-Multi-Ressourcen-Gruppe, Rechenleistungskoordination, föderierte Planung; Inferenzdienst des TF/Pytorch/Onnx-Modells, serverlose Verkehrssteuerung, Tensorrt-GPU-Inferenzbeschleunigung, HPA-Fähigkeit basierend auf GPU-Auslastung/QPS und anderen Indikatoren, virtualisierte GPU , virtueller Videospeicher und andere Servicefunktionen.

Derzeit wird Cube-Studio von Tencent Music als Open Source auf Github bereitgestellt: https://github.com/tencentmusic/cube-studio

Open-Source-Testumgebung: http://114.96.98.168:20080/frontend/Kontoadministrator Passwortadministrator

2. Open-Source-Code-Framework und -Struktur

Das Ende der Plattformsteuerung ist das Fab-Python-Framework, das auf dem Flask-Framework basiert. Sie können zunächst das Flask-Framework verstehen.

2.1 Datenbankbezogener Code

2.1.1 Datenbankstruktur

Die Datenbankstruktur wird in myapp/models gespeichert, wie in der Abbildung gezeigt
Fügen Sie hier eine Bildbeschreibung ein

2.1.2 Datenbankinitialisierung

Fügen Sie hier eine Bildbeschreibung ein

Wie in der Abbildung gezeigt, wird das Schreiben in die Datenbank in cli.py initialisiert und Datenoperationen werden über db.session ausgeführt.

2.1.3 Iteration der Datenbankaktualisierung

Die iterative Versionsdatei befindet sich in myapp/migrations/versions
1. Verwenden Sie zunächst den Befehl myapp db upgrade, um die Datenbank entsprechend der Schnittstelle im Versionsverzeichnis auf den neuesten Stand zu bringen.

2. Anschließend aktualisiert myapp db migrate die neueste Schnittstelle im Code im Versionsverzeichnis.

3. Rufen Sie dann den Befehl myapp db upgrade auf, um auf die neueste Version der Datenbank zu aktualisieren.
Fügen Sie hier eine Bildbeschreibung ein

2.2 Einführung in die Backend-Schnittstelle

2.2.1 Einführung in den Back-End-Code

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

Wie in der Abbildung gezeigt, kann durch Definieren einer Klasse, Festlegen der Basisroute route_base und anschließendes Definieren der spezifischen API-Schnittstelle und Restful-Methode über @expose und anschließendes Hinzufügen der Klasse über appbuilder.add_api eine Backend-Schnittstelle definiert werden.

	#所有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 Schnittstellenfilterfunktion

过滤函数:
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 Entwicklung geplanter/asynchroner Sellerie-Aufgaben

  • Entwicklung des Codes für geplante Aufgaben: myapp/tasks/schedules.py
    Fügen Sie hier eine Bildbeschreibung ein

    Nutzungsszenarien: 1. Geplante Aufgaben, z. B. regelmäßiges Löschen alter Workflows, TFJob, PytorchJob, Testaufgaben, Dienste, Notebooks usw. Übermitteln Sie regelmäßig die Konfiguration geplanter Aufgaben, überwachen Sie GPU-Ressourcen und weisen Sie Ressourcen mehreren Projektgruppen zu

  • Asynchrone Aufgabencodeentwicklung: myapp/tasks/async_task.py

    Nutzungsszenarien: 1. Asynchrone Aufgaben, Funktionen, deren Ausführung lange dauert, z. B. Graustufen-Upgrade-Dienste, Erstellen von Bildern usw.

  • Aufgabenkonfiguration: CeleryConfig in config.pyFügen Sie hier eine Bildbeschreibung ein

2.2.4 CRD-Änderungen überwachen

Fügen Sie hier eine Bildbeschreibung ein

Code-Entwicklung: myapp/tools/watch_xx.py
Fügen Sie hier eine Bildbeschreibung ein

Verwendungsszenarien: Überwachen Sie Statusänderungen von Trainings- und Inferenzworkflows, senden Sie Nachrichten und zeichnen Sie Aufgabenwarteschlangen über den Redis-Cache auf

2.2.5 Rufen Sie k8s-bezogene Komponenten auf

Fügen Sie hier eine Bildbeschreibung ein

3. Projektbetrieb

3.1 Lokaler Betrieb

Für die lokale Ausführung sind hauptsächlich zwei Konfigurationsdateien erforderlich: mysql-compose.yml und docker-compose.yml
Fügen Sie hier eine Bildbeschreibung ein
1. Starten Sie den lokalen Docker. Windows kann Docker-Desktop aktivieren.

2 Führen Sie die MySQL-Datenbank aus

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

3.Erstellen Sie Front-End- und Back-End-Images.

  • Front-End-Image-Docker-Datei: install/docker/dockerFrontend/DockerfileFügen Sie hier eine Bildbeschreibung ein

  • Backend-Image-Dockerfile: install/docker/Dockerfile.dashboardFügen Sie hier eine Bildbeschreibung ein

4. Ändern Sie die Front-End- und Back-End-Bilder in /install/docker/docker-compose.yml und führen Sie docker-compose aus. Sie können die Seite http://localhost:8888/frontend im Browser anzeigen.

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

3.2 Ausführen des Containers

3.2.1 Infra-Namespace

Fügen Sie hier eine Bildbeschreibung ein
Wie in der Abbildung oben gezeigt:
kubeflow-dashboard: Back-End-Container
kubeflow-dashboard-frontend: Front-end-Container
kubeflow-dashboard-schedule: asynchron, geplant und andere Aufgabenplanungscontainer
kubeflow-dashboard-worker: asynchron, geplant und andere Aufgabenarbeitscontainer
kubeflow-watch: crd und andere Überwachungscontainer
mysql: Datenbank
redis: Datenbank zwischenspeichern, asynchrone, geplante und andere Aufgabenwarteschlangen aufzeichnen

3.2.2 Kubeflow-Namespace

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/qq_45808700/article/details/135147375
Recomendado
Clasificación