Python-Optimierung: Cython
Der Python-Code ist optimiert. Alle Aufgaben sind parallelisiert, die CPUs laufen alle mit 99%. Die Datenbank ist optimiert. Die Hardware ist ausgereizt. Trotzdem muss noch ein Faktor 30 an Rechenzeit gewonnen werden.
Es gibt nun nur noch wenige Möglichkeiten:
- Andere Programmiersprache/Plattform/Framework
- Auslagern von Rechenprozessen in die GPU
- Optimieren des Python-Codes mit Cython
Wenn doch kein anderer Weg mehr offen steht:
- ist die erste Option die schlechteste. Die eigene Entwicklermannschaft muss entweder etwas komplett neues lernen oder neue Team-Mitglieder müssen aufwändig ins Team integriert werden.
- das Auslagern von Prozessen in die GPU kann eine gewaltige Steigerung der Rechenleistung (Faktor100/1000) bringen, wenn das Problem sich entsprechend transformieren lässt. Auch ist zu bedenken, dass entsprechende GPU Hardware/Lizenzen zu kaufen/verwalten sind. Ohne externe Spezialisten kein Chance. Die Anpassungen können aber dann mit geschulten Entwicklern selbst gestemmt werden.
- Die Optimierung mit Cython (Faktor 2-40) geschieht i.d.R. auch nicht einfach so. Externe Spezialisten können aber schnell einen Wissenstransfer herstellen, der die Inhouse-Entwickler befähigt Ihren bestehenden Code zu optimieren. Auch ist die Cython-Optimierung kaum abhängig von der Problemstellung/Hardware.
Kursinhalt:
Nach einer einfachen Einführung in die Arbeitsweise von Cython wird ein in Python gegebener Algorithmus (QuadTree) Stück um Stück nach Python portiert.Bei dieser Portierung lernen Sie Flaschenhälse in Ihrem Python Code zu finden. Denn wir zeigen Ihnen unter welchen Performance-Problemen die Python/Numpy Datenstrukturen leiden.
Dabei werden drei Punkte speziell vertieft:
- Numpy arrays effektiv aus Cython heraus nutzen mit memory views
- "Cython extension types": Objektorientiertes Cython und seine Grenzen
-
"Exception handling" : Wie kann man Exceptions aus Cython nach Python leiten.
Kursziel:
Nach erfolgreichem Abschluss diesen Kurses sollten Sie in der Lage sein selber mit Cython:
-
Performante Subroutinen zu erzeugen
-
Mit "Extension types" sogar objektorientiertes Cython zu schreiben.
-
Ein generell besseres Verständnis für Optimierung haben.