Das automatische Tuning-Tool AOE lässt Ihr Modell effizient auf der Ascend-Plattform laufen

Zusammenfassung: Wenn die Leistung des Betreibers oder des Netzwerks schlecht ist, kann AOE zur Abstimmung verwendet werden. In diesem Artikel lernen Sie das automatische Tuning-Tool AOE kennen, damit Ihr Modell effizient auf der Ascend-Plattform ausgeführt werden kann.

Dieser Artikel wurde von der Huawei Cloud Community " Automatisches Tuning-Tool AOE, lassen Sie Ihr Modell effizient auf der Shengteng-Plattform laufen ", Autor: Shengteng CANN, geteilt.

Was sind AOEs?

AOE (Ascend Optimization Engine) ist ein automatisches Tuning-Tool, das entwickelt wurde, um begrenzte Hardware-Ressourcen voll auszunutzen und die Leistungsanforderungen der Betreiber und des gesamten Netzwerks zu erfüllen.

AOE iteriert kontinuierlich durch den Closed-Loop-Feedback-Mechanismus zum Generieren von Tuning-Strategien, Kompilieren und Verifizieren in der Betriebsumgebung und erhält schließlich die beste Tuning-Strategie, um die Hardware-Ressourcen voll auszunutzen und die Netzwerkleistung zu verbessern.

Die Struktur von AOE ist wie folgt.

Anwendungsschicht : Tuning-Eintrag, die Unterstützung ist wie folgt.

  • AOE: AOE bedeutet hier den AOE-Prozess, der der Tuning-Eintrag für Offline-Inferenzszenarien ist.
  • TFAdapter (TensorFlow Adapter): Der Tuning-Eintrag für TensorFlow-Trainingsszenarien.
  • PyTorchAdapter (PyTorch Adapter): Der Tuning-Eintrag für PyTorch-Trainingsszenarien.

Tuning-Layer : Tuning-Modus, unterstützt die folgenden Typen.

  • SGAT (SubGraph Auto Tuning): Subgraph-Tuning. Ein komplettes Netzwerk wird in mehrere Teilgraphen aufgeteilt. Für jeden Teilgraphen werden von SGAT verschiedene Tuning-Strategien generiert. Der Abstimmungsalgorithmus von SGAT findet die optimale Abstimmungsstrategie, indem er die Leistungsdaten der Abstimmungsstrategie jeder Iteration erhält, um die optimale Leistung des entsprechenden Teilgraphen zu erreichen.
  • OPAT (Operator Auto Tuning): Bediener-Tuning. AOE gibt ein ganzes Bild in OPAT ein, und OPAT führt eine Operatorfusion durch, unterteilt das fusionierte Bild in Operatorgranularität und erzeugt verschiedene Operatoroptimierungsstrategien für jeden fusionierten Operatoruntergraphen, um eine optimale Operatorleistung zu erreichen.
  • GDAT (Gradient Auto Tuning): Gradienten-Tuning. In dem verteilten Trainingsszenario maximiert GDAT die Parallelität von Rückrechnung und Gradientenaggregationskommunikation, verkürzt die Kommunikationsschwanzzeit und verbessert die Leistung des Clustertrainings.

Ausführungsschicht : Dies ist die Ausführungsschicht, die das Kompilieren (Compiler) und das Ausführen in der Laufzeitumgebung (Runner) unterstützt.

Wie AOE funktioniert

Im Folgenden wird Operator-Tuning als Beispiel verwendet, um das Arbeitsprinzip von AOE vorzustellen.

1. Importieren Sie das ursprüngliche Open-Source-Framework-Modell in GE und FE für die Graphvorbereitung (InferShape, Operatorauswahl usw.) und das Aufteilen von Untergraphen.

2. Betrete die Stufe der Operatorkompilierung und vergleiche die Wissensbasis gemäß den Informationen der geteilten Untergraphen.

Wenn es mit der Wissensdatenbank abgeglichen werden kann:

- Verwenden Sie in dem Szenario, in dem REPEAT_TUNE nicht aktiviert ist, direkt die Optimierungsstrategie in der vorhandenen Wissensdatenbank, um den Operator zu kompilieren.

- Schalten Sie die Szene von REPEAT_TUNE ein und passen Sie sie über AOE an.

Wenn das abgestimmte Ergebnis besser als die bestehende Wissensbasis ist, wird das abgestimmte Ergebnis in der benutzerdefinierten Wissensbasis gespeichert und der Operator wird unter Verwendung der Abstimmungsstrategie in der benutzerdefinierten Wissensbasis kompiliert.

Wenn das Abstimmungsergebnis nicht besser als die vorhandene Wissensbasis ist, wird keine benutzerdefinierte Wissensbasis generiert, und die vorhandene Wissensbasis wird verwendet, um Operatoren direkt zu kompilieren.

Wenn es nicht mit der Wissensbasis übereinstimmt, wird es durch AOE abgestimmt.

- Wenn das abgestimmte Ergebnis besser ist als die Leistung der standardmäßigen Abstimmungsstrategie, wird das abgestimmte Ergebnis in die benutzerdefinierte Wissensdatenbank geschrieben, und der Operator wird unter Verwendung der Abstimmungsstrategie in der benutzerdefinierten Wissensdatenbank kompiliert.

– Wenn das Tuning-Ergebnis nicht besser als die Leistung der Standard-Tuning-Strategie ist, wird keine benutzerdefinierte Wissensbasis generiert, und die Standard-Tuning-Strategie wird verwendet, um den Operator zu kompilieren.

3. Im Inferenzszenario wird nach Abschluss der Kompilierung eine an den Ascend-AI-Prozessor angepasste Offline-Modelldatei generiert. Im Trainingsszenario wird nach Abschluss der Kompilierung eine trainierte Netzwerkmodelldatei generiert.

AOE-Nutzungsszenarien

Wenn die Leistung des Betreibers oder des Netzwerks schlecht ist, kann AOE zur Optimierung verwendet werden. Die vom AOE-Tuning unterstützten Szenarien lauten wie folgt:

  • Offline-Argumentation
  • TensorFlow-Training
  • PyTorch-Schulung
  • Online-Argumentation
  • IR-Zusammensetzung

Wie verwende ich AOE zum Tunen?

Im Folgenden wird die Betreiberoptimierung des Caffe-Netzwerks im Offline-Inferenzszenario als Beispiel verwendet, um vorzustellen, wie die AOE-Optimierung durchgeführt wird.

1. Bereiten Sie die Modelldatei vor.

2. Konfigurieren Sie Umgebungsvariablen.

Obligatorische Umgebungsvariable

- Das CANN-Paket bietet ein Skript zum Einstellen von Umgebungsvariablen auf Prozessebene, auf das Benutzer im Prozess verweisen können, um das Einstellen von Umgebungsvariablen automatisch abzuschließen. Führen Sie den Referenzbefehl wie folgt aus. Die folgenden Beispiele sind die Standardinstallationspfade für Root- oder Nicht-Root-Benutzer. Bitte beziehen Sie sich auf den tatsächlichen Installationspfad.

# 以root用户安装toolkit包
/usr/local/Ascend/ascend-toolkit/set_env.sh 
# 以非root用户安装toolkit包
${HOME}/Ascend/ascend-toolkit/set_env.sh

- Das AOE-Tool ist von Python abhängig. Am Beispiel von Python 3.7.5 führen Sie bitte die folgenden Befehle als aktueller Benutzer aus, um die relevanten Umgebungsvariablen von Python 3.7.5 zu setzen.

#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH

optionale Umgebungsvariablen

export ASCEND_DEVICE_ID=1
export TUNE_BANK_PATH=/home/HwHiAiUser/custom_tune_bank
export TE_PARALLEL_COMPILER=7
export REPEAT_TUNE=True
命令中的参数含义如下。
  • ASCEND_DEVICE_ID: Logische ID des Ascend-AI-Prozessors.
  • TUNE_BANK_PATH: Der Speicherpfad der benutzerdefinierten Wissensdatenbank nach dem Tuning.
  • TE_PARALLEL_COMPILER: Aktivieren Sie die parallele Kompilierungsfunktion des Operators.
  • REPEAT_TUNE: ob die Abstimmung erneut eingeleitet werden soll.

3. Um das AOE-Tuning durchzuführen, lautet der Befehl wie folgt. Die in den Befehlen verwendeten Verzeichnisse und Dateien sind Beispiele, beziehen Sie sich bitte auf die tatsächliche Situation.

aoe --framework=0 --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --job_type=2

Die Bedeutung der Parameter im Befehl ist wie folgt.

  • framework: Der Framework-Typ des ursprünglichen Netzwerkmodells. 0 bedeutet Kaffee.
  • model: Dateipfad und Dateiname des ursprünglichen Modells.
  • Gewicht: Der Dateipfad und Dateiname des ursprünglichen Modellgewichts.
  • job_type: Tuning-Modus, 2 bedeutet Operator-Tuning.

4. Wenn die folgenden Informationen angezeigt werden, bedeutet dies, dass das AOE-Tuning abgeschlossen ist.

Aoe process finished

Nachdem die Optimierung abgeschlossen ist, sehen die generierten Dateien wie folgt aus.

- Benutzerdefinierte Wissensdatenbank: Wenn die Bedingungen zum Generieren einer benutzerdefinierten Wissensdatenbank erfüllt sind, wird eine benutzerdefinierte Wissensdatenbank generiert.

- om Modelldatei, der Speicherpfad ist:

${WORK_PATH}/aoe_workspace/${model_name}_${timestamp}/tunespace/result/${model_name}_${timestamp}_tune.om
${WORK_PATH}:调优工作目录
${model_name}:模型名称
${timestamp}:时间戳

- Operator-Tuning-Ergebnisdatei: Eine Datei mit dem Namen „aoe_result_opat_{timestamp}_{pid xxx }.json“ wird in Echtzeit im Arbeitsverzeichnis generiert, in dem das Tuning durchgeführt wird, und zeichnet die abgestimmten Operatorinformationen während des Tunings auf. Beispiele sind wie folgt.

"basic": {
 "tuning_name": "调优任务名",
 "tuning_time(s)": 1827
 }
 "OPAT": {
 "model_baseline_performance(ms)": 113.588725,
 "model_performance_improvement": "0.31%",
 "model_result_performance(ms)": 113.236731,
 "opat_tuning_result": "tuning successful",
 "repo_modified_operators": {
 "add_repo_operators": [
 {
 "op_name": "strided_slice_10",
 "op_type": "stridedsliced",
       ……
 "repo_summary": {
 "repo_add_num": 2,
 "repo_hit_num": 17,
 "repo_reserved_num": 15,
 "repo_unsatisfied_num": 0,
 "repo_update_num": 2,
 "total_num": 19
 }

5. Verwenden Sie nach Abschluss der Optimierung die optimierte benutzerdefinierte Wissensdatenbank, um erneut zu prüfen, ob die Leistung verbessert wurde.

Das Obige ist eine kurze Einführung in AOE. Weitere Inhalte finden Sie im Shengteng Documentation Center , und Sie können auch Videokurse im Abschnitt „ Shengteng Community Online Course " studieren. Wenn Sie während des Lernprozesses Fragen haben, können Sie im „ Shengteng Foren “!

 

Klicken Sie hier, um zu folgen und zum ersten Mal etwas über die neuen Technologien von Huawei Cloud zu erfahren~

{{o.name}}
{{m.name}}

Guess you like

Origin my.oschina.net/u/4526289/blog/8591133