Numba als Python zu beschleunigen

Ich habe Cython ziemlich oft benutzt, aber manchmal finde ich es ärgerlich (zum Beispiel brauche ich setup.py in großem Maßstab), und ich habe etwas über Numba herausgefunden, was es einfacher macht, Python zu beschleunigen. Ist es nicht schön, mit llvm wie Julia JIT zu machen? Ich habe es auch mit Bezug auf den folgenden Artikel versucht. Wenn Sie Numba selbst noch nicht kennen, lesen Sie bitte zuerst den Link.

Im Moment geht es nur darum, wie man es implementiert.

Wie installiert man

Für Mac 10.9 mit Python 2.7

Es hat unten funktioniert.

sudo easy_install funcsigs enum34 numba

git clone https://github.com/numba/llvmlite
cd llvmlite/
sudo python setup.py install

Bitte beachten Sie Folgendes.

--llvmlite kann mit easy_install eingegeben werden, aber dylib ist nicht genug und ein Laufzeitfehler (warum?)

Für Windows7 64bit Python 2.7

~~ Ich werde Windows7 bald mit WinPython2.7 herausfordern, aber ich denke, dass llvm notwendig ist, C ++ 11-Unterstützung wahrscheinlich notwendig ist, 64bit scheint schwierig zu sein und es gibt viele Wände ... ~~ Anaconda Ich habe es eingegeben und es hat bestanden. Ich habe Anaconda zum ersten Mal verwendet, aber es scheint gut für Leute zu sein, die die Möglichkeit haben, numerische Berechnungen zu nagen oder ihren eigenen Python-Code beschleunigen möchten.

Verwendung und Eindruck

Ich werde dies später hinzufügen, aber ich werde es wagen, es mit einem anderen Prozess als der numerischen Berechnung zu versuchen. Der Grund dafür ist, dass die Auswirkung auf die numerische Berechnung bereits vom oben genannten Vorgänger bewertet wurde und ich zufällig ein kompliziertes Lese- / Schreibprogramm für Binärdaten anstelle einer numerischen Berechnung mache.

Zur Verwendung mit PyInstaller

Die Verwendung von PyInstaller macht Python-Skripte ausführbar und erleichtert die Verteilung an andere. Bei Verwendung von numba wird jedoch zur Laufzeit der folgende Fehler ausgegeben. Dies liegt daran, dass PyInstaller keine Dateien sammelt, die Python dynamisch öffnet.

OSError: dlopen(/var/folders/qk/z4x58g2962q21q5570g2hj0c0000gn/T/_MEIRXXAjg/llvmlite/binding/libllvmlite.dylib, 6): image not found

Nehmen wir also diese Dylib in das Build-Ergebnis auf. Sie können das Problem umgehen, indem Sie die folgenden Schritte ausführen. PyInstaller verwendet github tag v2.1.

Für Mac

  1. python pyinstaller / pyinstaller.py --onefile test.py. Zu diesem Zeitpunkt wird test.spec erstellt und gleichzeitig wird eine Exe basierend auf dieser test.spec erstellt. Diese Exe befindet sich jedoch im obigen Fehlerzustand.

  2. Fügen Sie test.spec die folgende Zeile hinzu und weisen Sie sie an, libllvmlite.dylib in eine ausführbare Datei mit einer Datei einzubetten.

    # -*- mode: python -*-
    a = Analysis(['test.py'],
                 pathex=['/path/to/main/script'],
                 hiddenimports=[],
                 hookspath=None,
                 runtime_hooks=None)
    
    #Eine Zeile darunter wird hinzugefügt
    a.binaries += [("llvmlite/binding/libllvmlite.dylib", "/Library/Python/2.7/site-packages/llvmlite/binding/libllvmlite.dylib", 'BINARY')]
    
    pyz = PYZ(a.pure)
    exe = EXE(pyz,
              a.scripts,
              a.binaries,
              a.zipfiles,
              a.datas,
              name='test',
              debug=False,
              strip=None,
              upx=True,
              console=True )
    
  3. Setzen Sie python pyinstaller / pyinstaller.py --clean test.spec und erstellen Sie es mit der geänderten test.spec neu.

Für Windows Anaconda

(Angenommen, Sie haben die Umgebung in C: \ Anaconda installiert.) Wenn Sie zunächst versuchen, die Anaconda-Umgebung mit PyInstaller zu verwenden, tritt ein Fehler auf, dass Pywintypen unabhängig von Numba nicht gefunden werden können. Ich konnte es jedoch lösen, indem ich die DLL an der Stelle platzierte, die in PyInstaller unter [hier beschriebene Methode] gefunden wurde (http://stackoverflow.com/questions/19280894/py2exe-no-system-module-pywintypes).

cd C:\Anaconda\Lib\site-packages\win32\
copy pywintypes27.dll lib\
copy pythoncom27.dll lib\

Danach schreiben Sie einfach die Beschaffungsmethode von llvmlite.dll in .spec wie im Fall von Mac. Wenn Sie es in C: \ Anaconda installiert haben, sollte die Zeile, die Sie hinzufügen sollten, folgendermaßen aussehen:

a.binaries += [("llvmlite/binding/llvmlite.dll", "C:\\Anaconda\\Lib\\site-packages\\llvmlite\\binding\\llvmlite.dll", 'BINARY')]

Recommended Posts

Numba als Python zu beschleunigen
Beschleunigen Sie Python mit numba grob
So beschleunigen Sie Python-Berechnungen
[Python] Geben Sie Ihr Bestes, um SQL Alchemy zu beschleunigen
Project Euler 4 Versuch zu beschleunigen
[DRF] Snippet zur Beschleunigung von PrimaryKeyRelatedField
Schreiben Sie Python nicht, wenn Sie es mit Python beschleunigen möchten
[Python] Drücken Sie Keras von TensorFlow und TensorFlow von c ++, um die Ausführung zu beschleunigen.
Unverzichtbar, wenn Sie Python verwenden! Wie man Numpy benutzt, um Berechnungen zu beschleunigen!
Wie man die schöne Suppeninstanziierung beschleunigt
Auf Python 2.7.9 aktualisiert
"Backport" zu Python 2
Python C / C ++ - Erweiterungsmuster-Übergeben Sie Daten als np.array an Python
Wie man Scicit-Learn wie Conda Numpy beschleunigt
Geschwindigkeit: Element am Ende des Python-Arrays hinzufügen
So geben Sie "Ketsumaimo" standardmäßig in Python aus
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen von Klassen Teil ➀
Organisieren Sie Python-Tools, um die anfängliche Bewegung von Datenanalyse-Wettbewerben zu beschleunigen
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen von Klassen Teil ➁
Python-Programm ist langsam! Ich möchte beschleunigen! In einem solchen Fall ...
Vom Einrichten des Raspberry Pi bis zur Installation der Python-Umgebung
Versuch und Irrtum, um die Erzeugung von Wärmekarten zu beschleunigen
Versuch und Irrtum, um Android-Screenshots zu beschleunigen
So installieren Sie Python
So richten Sie eine Python-Umgebung mit pyenv ein
Python ~ Grammatikgeschwindigkeit lernen ~
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Geschwindigkeit der Listeneinschlussnotation in Python
Schreiben Sie Python2-Code in Python3 um (2to3)
So installieren Sie Python
Einführung in die Python-Sprache
775/664, 777/666, 755/644 usw.
Einführung in OpenCV (Python) - (2)
Beachten Sie, dass Python ein Daemon ist
Einführung von Python 2.7 in CentOS 6.6
Geben Sie MinGW als den in Python verwendeten Compiler an
Überprüfung des Atcoders ABC158 bis Frage E (Python)
Hinweise zur Beschleunigung des Python-Codes mit Numba
Mehrstellige Multiplikationszeit bis zu 300 Millionen Stellen in Python
[Einführung in die Udemy Python3 + -Anwendung] 68. Importanweisung und AS
Verbinden Sie Python mit MySQL
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen einer einfachen Funktion Teil ➀
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen einer einfachen Funktion Teil ➁
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Ein Skript, das bis zu 5 Sekunden zählt und in Blenders Python stoppt
Was ich getan habe, um die String-Suchaufgabe zu beschleunigen
Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
So importieren Sie die in EFS eingerichtete Python-Bibliothek in Lambda
Rückblick auf den AtCoder Beginner Contest 163 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
Ich habe versucht, die Videoerstellung durch parallele Verarbeitung zu beschleunigen
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit
[Python Kivy] So erstellen Sie ein einfaches Popup-Fenster
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen