[Für Numba-Anfänger] Es ist besser, nopython = True (für Version 0.50.0 oder früher) zu setzen, um zu überprüfen, ob die Beschleunigung realisiert wird.

Hinweis: Das Zurückfallen im Objektmodus wird nach Numba Version 0.50.0 (http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-object-mode-) aufgehoben. Fallback-Verhalten bei Verwendung von jit), der Inhalt dieses Artikels ist auf frühere Versionen beschränkt.

Was ist Numba? Bitte lesen Sie diesen Artikel für diejenigen, die sagen: https://qiita.com/gyu-don/items/9d223b007ca620e95abc


Numba versucht zunächst, im Nopython-Modus zu beschleunigen. Wenn dies fehlschlägt, wechselt es in den Objektmodus (der ziemlich langsam ist) und führt ihn aus (Objektmodus-Fallback). In diesem Artikel heißt es jedoch, dass es aus Sicherheitsgründen von Anfang an besser ist, nopython = True zu setzen, da sich dadurch ändert, ob es sich mit einer relativ kleinen Codeänderung im Nopython-Modus befindet oder nicht. Es ist der Inhalt von. (Der Standardwert ist nopython = False. Wenn Sie diesen Wert auf nopython = True setzen, wird ein Fehler zurückgegeben, wenn der Nopython-Modus fehlschlägt.)

Wenn Sie beispielsweise im folgenden Code die assert-Anweisung auskommentieren, wird sie im Nopython-Modus ausgeführt, und wenn Sie sie nicht auskommentieren, wird sie im Objektmodus ausgeführt.

import numpy as np
import numba

@numba.jit
def myfunc():
    for i in range(1000):
        for k in range(1000):
            #assert 0<1
            pass
    hoge = [1,2,3]
    hoge = np.array(hoge)

myfunc()

Im Fall dieses Codes ist es in Numba zum Zeitpunkt der Zuweisung von Variablen unterschiedlichen Typs (Liste und Ndarray) zum gleichen Variablennamen hoge zunächst nicht gut, aber selbst bei solch schlechtem Schreiben im Nopython-Modus Es scheint, dass es ausgeführt werden kann. Wenn sich jedoch eine assert-Anweisung in der for-Schleife befand, ging sie sofort in den Objektmodus (ich kenne die Ursache nicht). Auch wenn Sie es gut schreiben und eine Funktion verwenden, die der Nopython-Modus nicht unterstützt, befinden Sie sich im Objektmodus. Beispiel ⇒ http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#id1

In neueren Numba-Versionen wird eine Warnmeldung angezeigt, wenn die Ausführung des Nopython-Modus fehlschlägt. In älteren Numba-Versionen wird jedoch keine Warnmeldung angezeigt, selbst wenn der Nopython-Modus fehlschlägt. __ (Version 0.48.0) Ich habe eine Warnung erhalten, aber in Version 0.41.0 habe ich keine Warnung erhalten. Selbst wenn sich die Ausführungsgeschwindigkeit beim Spielen mit verschiedenen Codes plötzlich verlangsamt, ist es schwierig, die Ursache zu erkennen.

@ numba.jit (nopython = True) ist sicher, da es einen Fehler zurückgibt, wenn die Ausführung des Nopython-Modus fehlschlägt.

Recommended Posts

[Für Numba-Anfänger] Es ist besser, nopython = True (für Version 0.50.0 oder früher) zu setzen, um zu überprüfen, ob die Beschleunigung realisiert wird.
So überprüfen Sie, ob es sich um einen Wörterbuch-Typ (Wörterbuch, Hash) handelt, indem Sie einen oder alle verwenden
Überprüfen Sie, ob es sich um Unix in der Skriptsprache handelt
Überprüfen Sie "[Windows] Wie Sie feststellen können, ob die Exe x64 oder x86 Teil 2 ist" mit Go unter macOS
Ich habe eine Funktion erstellt, um zu überprüfen, ob der Webhook vorerst in Lambda empfangen wird
[Blender] Skript zum Überprüfen, ob es sich bei dem ausgewählten um ein Netz handelt
Tensorflow-GPU scheint zusammen zu sein, wenn TF2.0 oder höher?