python加速
A. 如何讓python使用cuda加速
Numba通過及時編譯機制(JIT)優化Python代碼,Numba可以針對本機的硬體環境進行優化,同時支持CPU和GPU的優化,並且可以和Numpy集成,使Python代碼可以在GPU上運行,只需在函數上方加上相關的指令標記!
B. 怎樣使用gpu加速python深度學習
Colman裡面可以調模式的。
C. 如何在i5上實現20倍的Python運行速度
Intel Distribution for Python 在今年二月進行了更新——英特爾發布了 Update 2 版本。以「加速」為核心的它,相比原生 Python 環境有多大提升呢?
雷鋒網獲知,並行計算專家、前英特爾高級工程師 James Reinders 對老東家的產品進行了測試。他對外宣布:在配備四核 i5 的 iMAC 上實現了 20 倍的性能加速!
至於他是怎麼做到的,請繼續往下看(含代碼)。
James Reinders
James Reinders:利用 Intel Distribution for Python,我實現了Python 的 20 倍加速,並且可用單個命令關閉/啟用。這還不是在最優情況下,而在虛擬環境——在 VirtualBox(下文簡稱 VBox) 上運行的 openSUSElinuxTumbleweed(即「滾動版本」,請參考 openSUSE官網),使用的機器是四核 iMac。
這在Windows, Linux 或 OS X 都能實現。英特爾並沒有把openSUSE 加入經他們測試過的 Linux 配置列表中(SUSE Enterprise 在表中),但我在運行中並沒有遇到任何問題。
這就是我怎麼做的:
下載Anaconda 命令行安裝程序,地址為 。
安裝:% bash Anaconda2-4.3.0-Linux-x86_64.sh
安裝英特爾加速器,作為一個單獨的、可開啟關閉的「環境」:% conda config --add channels intel % conda create --name intelpy intelpython2_full python=2
運行示常式序,看到在我的 openSUSE VBox 設置上有 15 到 20 倍的速度提升。
- % source deactivate intelpy% python < myprog.py
- np.sin102400 10000 36.1987440586np.cos102400 10000 36.1938228607np.tan102400 10000 51.487637043
- % source activate intelpy% python < myprog.py
- np.sin102400 10000 1.76131296158np.cos102400 10000 1.83870100975np.tan102400 10000 3.38778400421That』s all! The speed-ups are 20.6X, 19.7X, and 15.2X in this quick test running on a virtual machine.
- Here』s my little Python program:% cat myprog.pyimport numpy as npimport time
- N = 102400x = np.linspace (0.0123, 4567.89, N)def mine (x,Z,func,name): print name;
- start = time.time () for z in range ( 0, Z ) :
- y = func (x);
- end = time.time () print N, Z, end - start returnmine (x,10000,np.sin,'np.sin')
- mine (x,10000,np.cos,'np.cos')
- mine (x,10000,np.tan,'np.tan')
利用多核;
利用矢量指令(SIMD),比如 SSE, AVX, AVX2 和 AVX-512;
使用英特爾 Math Kernel Library(Intel MKL) 的更先進演算法。
- % source deactivate intelpy% python < myfftprog.py
- fft5000 2.22796392441fft7000 8.74916005135
- % source activate intelpy% python < myfftprog.py
- fft5000 0.277629137039fft7000 1.11230897903
- % cat myfftprog.pyimport numpy as npimport numpy.random as rnimport timedef trythis (Z):
- mat = rn.rand (Z,Z) + 1j * rn.randn (Z,Z) print 'fft'
- start = time.time () # 2D transform on a complex-valued matrix:
- result = np.fft.fft2(mat)
- end = time.time () print Z, end - start returntrythis (5000);
- trythis (7000);
優化 NumPy 的算術和transcendental 表達
Transcendental expressions 包含我在快速示常式序里用的 cosine, sine 和 tangen。這些優化的核心是對 NumPy 的改變,使得 primitives (在 ndarray 數據上進行運算)能選擇性地使用英特爾 MKL Short Vector Math Library (SVML)和 MKL Vector Math Library (VML) 的能力。這使得 Python 利用處理器的最新矢量能力,包括多核優化和 AVX/AVX2/AVX-512。英特爾團隊表示,他們利用 Xeon Phi,實現過NumPy 算術和 transcendental 運算在 vector-vector 和 vector-scalar 上最高 400 倍的速度提升。
優化NumPy 和 SciPy 的 FFT
這些優化的核心是英特爾 MKL,一系列 NumPy、SciPy 函數都能用到它對 FFT 的原生優化。這些優化包含真實、復雜的數據類型,單精度和雙精度都包含 (single and double precision),從一維到多維的數據,in place 或者out of place。英特爾團隊見到過這項更新帶來 60 倍的性能提升。這使得Python 的性能可與原生C/C++ 程序相媲美。
優化內存管理
Python 是一門動態語言,為用戶管理內存。Python 應用的性能,在很大程度上取決於內存運行的性能,這包括內存分配、再分配(de-allocation)、復制和移動。英特爾提供的加速版本 Python,能在 NumPy分配數組時保證最佳的 alignment,所以 NumPy、SciPy 的運算函數,能從相應排列的 SIMD 內存訪問指令獲益。英特爾表示最大的提升來自於對內存復制和移動運算的優化。
更快——能用Conda 方便地關閉/啟用
Anaconda 英特爾渠道的最新加速版本 Python,為 Python 程序帶來顯著性能優化,而無需改變代碼。下載、安裝也很方便。
我真的特喜歡用Conda 把它開啟/關閉這一功能。這方便了性能對比,並且讓我感到安心——沒有這個功能的話,我會對切換到超快的數學函數感到猶豫。
我花很短時間搞起來這個程序,用來驗證英特爾對加速NumPy 中transcendental expression 的承諾。Cosine, sine 和 tangent 是我還能記得的、搞 TI calculator 時候用的transcendental,所以我用它們來試。我決定對每一個進行十億級測試——運行超過十萬個數字的函數,重復超過一萬次。
雖然未必是一個很有意思的程序,但對於加速而言是個不錯的測試。
隨時加速Python
我此前寫過一篇文章,討論「Python 加速」(「accelerated Python」)使其更適用於大數據和 HPC 應用。在速度更快之外,我還展示了,使用 Conda 來開啟/關閉加速是多麼得容易。這非常贊,讓安裝它的決定變得更加安全、沒有顧慮——因為該功能是一個可選項。(對新手的提醒:Anaconda 是針對 Python 演算法包的集合,Conda 則是 package manager,即演算法包管理器。我兩個都用並且都很喜歡。)
我使用「conda create」來創造被我稱之為intelpy 的環境。然後,我能夠使用「source activate intelpy」、「source deactivate intelpy」來激活、關閉它。
Intel Distribution for Python 帶來的大幅加速能力,讓「accelerated Python」變得更實用更讓人信服。
值得注意的是,「accelerated Python」 只是使用更快的Python 演算法庫,不需要對代碼做任何改動。當然,我們的 Python 代碼必須使用了某些加速的東西,才能從中獲益。
據雷鋒網得知,英特爾通過三大方面實現 Python 加速:
對於運行於矢量或矩陣上的程序,上述這些都會生效。對於偶爾的單獨cosine,我們不應該期待大幅速度提升。同樣的,對於單核 CPU,我們也不應該有性能提升的幻想。當然,英特爾 72 核協處理器Xeon Phi 會在大量多核應用的跑分中領先。在我的例子中,我的虛擬機只利用 iMac i5 的四個核心。
FFT 在 4 核虛擬機上有八倍性能提升
我也試了下Fast Fourier Transforms (FFT)。使用與原始程序相同的設置,我只是按照如下方式運行FFT 程序:
速度提升為 8 和 7.9 倍。當然,還是運行於四核 iMac 上的 openSUSE 和 VBox。
這是我的快速FFT 程序:
新 Python 加速
我們了解到,以下是 Intel Distribution for Python 全新 Update 2 版本中,得到了新的速度提升的方面:
D. 看到幾個給 python 做加速的方案
python 性能加速的方法:
選擇一個正確的數據結構。
這個說法深有體會。Python中多變的數據結構可以造成很大的差異,使用一個set就可以事半功倍。甚至一個自己定義的數據結構,對於內存,運算速度,處理方式等都有很大的影響。
進行排序
我在項目中也遇到過,幾百萬的數據URL需要進行鑒別,哪些數據抓取了哪些沒有,抓取的部分還有重復。使用if x in y這種格式,則需要o(m*n)的時間復雜度。而兩邊都對URL進行排序後,則可以使用兩個指針輕松搞定。
字元串組合
編寫大字元串的時候,不建議使用加號拼接字元串。使用join,%s(py3中使用format方法)等官方的方法效果更好。
循環的使用
如果使用for循環進行簡單而大量的操作,不妨試試map()函數,或者python2.0中就已經有的list方法直接生成。或者使用迭代器進行循環的操作。
避免使用點方法
如上,需要使用list.append()方法的時候,這些方法都是需要在每次調用的時候重新確定(原文reevaluated)的,所以可以提前代替,如re.compile()方法。
使用局部變數
可以將一些代碼函數化,從而將變數轉為局部變數,Python獲取局部變數比使用全局變數要快得多。
初始化字典元素
字典的當前使用新技巧包括:使用keyError來定位沒有的key,使用get()方法來返回鍵對應的值。字典中還有collections模塊中較多的:defaultdict,OrderedDict類等。
首先在頭部寫明import聲明
大量的import會影響Python的性能。雖然隨處可以import, 但最好在代碼的頭部集中寫明。
數據的聚合
一次將多個數據聚合起來傳遞給函數比多次調用函數的開銷要小得多。
減少執行語句的數量
Python中有一個定期檢查線程是否該運行的函數。這個函數的大量調用會影響性能。最好我們可以設置這個值為較大的數,或者使用少的執行語句而以空間換時間。
Python不是C
移位不一定比加法快。Python是一個高級語言,調用底層不一定快。
使用profile來分析函數的性能
E. 瀏覽器,python命令哪個快
瀏覽器,python命令下載工具快。
特別是下載工具,一般會有自己的優化線路,以及p2p下載這樣的功能,可以加速下載,而你自己寫的request方法也沒有這樣的功能,是直接從原始站點單線程下載,相比之下,肯定會比下載工具的要慢一些。
python命令可移植性:
由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX。
VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平台。
F. 用Python 做策略回測,耗時很長,有什麼加速辦法
少用for,盡量用numpy/pandas的向量化方法。
少用自己寫的python方法,先看看numpy /pandas是不是已有現成的功能。
有幾個numpy 的加速包,比如numexpr.
安裝Intel MKL.
最後,可以講關鍵部分用c/c++實現。
如果無法避開python的for,建議使用Numba來提速,理想情況下可以達到和numpy向量化差不多的速度。
G. 加速Python程序運行
python是一門簡潔、高效的語言,這也是它的設計理念!下面我們來看一下如何加速我們的python。
以下舉例說明
一、分析代碼運行時間
第1式:測算代碼運行時間
平凡方法
快捷方法(jupyter環境)
第2式:測算代碼多次運行平均時間
平凡方法
快捷方法(jupyter環境)
第3式:按調用函數分析代碼運行時間
平凡方法
快捷方法(jupyter環境)
H. 用 Python 做策略回測,耗時很長,有什麼加速辦法
一個好的計算邏輯是很重要的啊,比如你去計算一個式子的時候,你去分析千百遍也不如你有一個好的運算方法。計算的時候一定要准備好計算方法,別的計算方法一定要統一規劃。
使用計算機的時候能用計算機交易,這樣能夠克服你的暴躁的情緒。構建屬於自己交易的水準,還有一些措施就是你要去看那些引導文檔,不要自己去摸索。要有自己的專業的知識。
I. 怎樣加快python官網上應用的下載速度
Python是一個很酷的語言,因為你可以在很短的時間內利用很少的代碼做很多事情。不僅如此,它還能輕松地支持多任務,比如多進程等。Python批評者有時會說Python執行緩慢。本文將嘗試介紹6個技巧,可加速你的Python應用程序。
1.讓關鍵代碼依賴於外部包
雖然Python讓許多編程任務變得容易,但它可能並不總能為緊急的任務提供最佳性能。你可以為緊急的任務使用C、C++或機器語言編寫的外部包,這樣可以提高應用程序的性能。這些包都是不能跨平台的,這意味著你需要根據你正在使用的平台,尋找合適的包。簡而言之,這個方案放棄了一些應用程序的可移植性,以換取只有在特定主機上直接編程才能獲得的程序性能。這里有一些你應該考慮加入到你的「性能兵工廠」的包:
J. 使用python編程處理大量數據,效率太慢怎麼解決
既然存有上千萬個數據,為什麼不使用資料庫呢?
使用小型的sqlite資料庫,加上適當的索引、篩選,肯定能大大提高數據處理速度。
python也自身帶有處理sqlite資料庫的模塊,極其方便。