如何用Python一门语言通吃高性能并发、GPU计算和深度学习
【CTO講堂】如何用Python一門語言通吃高性能并發(fā)、GPU計算和深度學(xué)習(xí)
發(fā)表于2016-01-04 15:11|?4374次閱讀| 來源CSDN|?4?條評論| 作者蒲婧
CTO俱樂部CTOCTO講堂Python深度學(xué)習(xí)GPU allowtransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2016-01-04%2F2826581-CTO&type=3&count=&appkey=&title=%E6%80%8E%E6%A0%B7%E5%AE%9E%E7%8E%B0Python%E7%9A%84%E5%A4%9A%E7%A7%8D%E5%BD%A2%E5%BC%8F%E4%BC%98%E5%8C%96%EF%BC%9F%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8%20gpu(opencl)%20%E5%8A%A0%E9%80%9F%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%EF%BC%9F%E2%80%9C%E8%A1%8C%E4%B8%BA%E5%BC%8F%E9%AA%8C%E8%AF%81%E2%80%9D%E5%AE%89%E5%85%A8%E6%A8%A1%E5%9E%8B%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84%EF%BC%9F%E6%9E%81%E9%AA%8C%E9%AA%8C%E8%AF%81%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84%EF%BC%9F%E7%94%A8%E5%88%B0%E4%BA%86%E4%BB%80%E4%B9%88%E6%8A%80%E6%9C%AF%EF%BC%9F%E6%9C%AC%E6%96%87%E4%B8%BA%E6%9E%81%E9%AA%8C%E9%AA%8C%E8%AF%81CTO%E9%BB%84%E8%83%9C%E8%93%9D%E5%9C%A8CTO%E8%AE%B2%E5%A0%82%E7%9A%84%E5%88%86%E4%BA%AB%E6%95%B4%E7%90%86%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1452080973993" width="22" height="16">摘要:怎樣實現(xiàn)Python的多種形式優(yōu)化?如何利用 gpu(opencl) 加速數(shù)據(jù)分析?“行為式驗證”安全模型是怎樣的?極驗驗證技術(shù)架構(gòu)是怎樣的?用到了什么技術(shù)?本文為極驗驗證CTO黃勝藍(lán)在CTO講堂的分享整理。為了幫助IT從業(yè)者職業(yè)之路擁有更多收獲,在諸多C粉的殷切期待下,由?CTO俱樂部打造的CTO線上講堂自登場以來獲得大家好評。本期邀請極驗驗證CTO黃勝藍(lán)帶來“如何用Python一門語言通吃高性能并發(fā)、GPU計算和深度學(xué)習(xí)?”的主題分享。
歡迎加入CTO講堂微信群與業(yè)界大咖零距離溝通,1月7日本期講堂報名方式拖至文末查看。
?
分享嘉賓:極驗驗證CTO 黃勝藍(lán)
嘉賓簡介:黃勝藍(lán) ,現(xiàn)任武漢極意網(wǎng)絡(luò)科技有限公司CTO。高中時期NOIP一等獎保送至武漢大學(xué),大學(xué)期間曾指導(dǎo)團(tuán)隊獲得世界數(shù)學(xué)建模大賽金獎,同時負(fù)責(zé)武漢大學(xué)學(xué)生校園門戶網(wǎng)站的運維工作。于2013年加入武漢極意網(wǎng)絡(luò)科技有限公司,帶領(lǐng)團(tuán)隊實現(xiàn)“行為式驗證”安全模型,同時構(gòu)建了高效、穩(wěn)定的服務(wù)架構(gòu)承載每天數(shù)十億請求。對于技術(shù)發(fā)展有深刻見解,善于將適合的新技術(shù)融入公司技術(shù)架構(gòu)中。
公司簡介:武漢極意網(wǎng)絡(luò)科技有限公司是全球首家“行為式驗證”安全技術(shù)服務(wù)提供商,開創(chuàng)了驗證安全從1.0時代到2.0時代的變革,并始終致力于為各大網(wǎng)站、應(yīng)用、企業(yè)提供“更安全、更便捷、更具智慧的驗證”服務(wù)及解決方案。
極意擁有業(yè)內(nèi)領(lǐng)先的自主知識產(chǎn)權(quán)與技術(shù)研發(fā)實力,其首創(chuàng)的“行為式驗證”安全技術(shù),徹底顛覆了傳統(tǒng)“碼式驗證”安全技術(shù)的思想,完成了14年以來驗證安全領(lǐng)域的第一次飛躍——安全性提高44.78倍以上,平均用戶驗證時長僅不到以前的1/3,提高用戶交互度達(dá)20%以上,全面支持移動終端的觸屏驗證體驗。
極意擁有強(qiáng)大創(chuàng)新能力的核心團(tuán)隊,里面有第四屆中國僑界貢獻(xiàn)獎(創(chuàng)新團(tuán)隊)核心成員負(fù)責(zé)項目整體運營、有獲得世界計算機(jī)性能大賽刷新世界紀(jì)錄的雅虎黑客負(fù)責(zé)云服務(wù)器構(gòu)架、有世界數(shù)學(xué)建模大賽冠軍負(fù)責(zé)“多重行為判別算法”的研究。公司自成立以來,就受到國內(nèi)外諸多投資機(jī)構(gòu)的關(guān)注與投資,去年公司接受了來自IDG的數(shù)千萬投資。目前我們的客戶包括新浪博客、斗魚、戰(zhàn)旗、聚美優(yōu)品、網(wǎng)金社等數(shù)萬家網(wǎng)站,對于游戲領(lǐng)域更是實現(xiàn)了全行業(yè)覆蓋。
以下是12月31日CTO講堂現(xiàn)場完整速記:?
主持人:今天講堂現(xiàn)在開始,歡迎極驗驗證CTO黃勝藍(lán),麻煩給大家介紹下自己吧。
黃勝藍(lán):大家好,我叫黃勝藍(lán),目前擔(dān)任武漢極意網(wǎng)絡(luò)科技有限公司CTO,在公司主要負(fù)責(zé)帶領(lǐng)團(tuán)隊構(gòu)建高性能的服務(wù)架構(gòu)和行為式安全模型。
看了我的照片應(yīng)該會有些人想知道我的年齡。我確實是比之前的嘉賓都會年輕很多,其實我今年上半年才剛剛踏出武漢大學(xué)的大門^_^。高中時期我通過計算機(jī)競賽一等獎保送到了武漢大學(xué),這個經(jīng)歷對我而言很重要,有了當(dāng)時對于數(shù)據(jù)結(jié)構(gòu)和算法較為深刻的學(xué)習(xí)使得現(xiàn)在在接觸實際工程中的一些概念時可以非常快速地了解其中的原理。大學(xué)大一大二在學(xué)校的自強(qiáng)網(wǎng)做運維工作,這段經(jīng)歷也讓我受益匪淺,對于互聯(lián)網(wǎng)相關(guān)技術(shù)也有了更多的了解。大二的暑假機(jī)緣巧合加入了極驗驗證團(tuán)隊。
主持人:請介紹一下目前極驗驗證的情況以及技術(shù)團(tuán)隊構(gòu)成。
黃勝藍(lán):極驗驗證今年已經(jīng)三歲了,目前我們的用戶幾乎遍布了互聯(lián)網(wǎng)各個領(lǐng)域,每天處理的驗證突破一億次,每秒數(shù)萬的并發(fā)對我們而言已經(jīng)是常態(tài)。典型的客戶包括新浪博客、斗魚TV、戰(zhàn)旗TV、熊貓TV、寶寶樹、聚美優(yōu)品、東方航空等。去年公司收到了來自IDG的數(shù)千萬A輪投資,目前正在進(jìn)行B輪,也是一線的投資機(jī)構(gòu)。
比較有意思的有一次我到西電請了一些學(xué)生社團(tuán)的負(fù)責(zé)人吃飯,十多個人中只有一個人沒見到過我們的產(chǎn)品。
?
?
這些是我們典型客戶的一個集中展示,分別是web端和移動端的。
團(tuán)隊方面,目前員工將近五十人,其中技術(shù)團(tuán)隊三十人多有,大部分都來自于武漢這邊的幾所高校,是一個非常非常年輕的團(tuán)隊。雖然團(tuán)隊在經(jīng)驗層面相對欠缺,不過目前從成果來看,不論是技術(shù)的深度還是廣度都還算是拿得出手的。
主持人:介紹下極驗驗證如何兼顧安全性與用戶體驗?
黃勝藍(lán):極驗驗證與傳統(tǒng)驗證碼對于驗證技術(shù)的理解是有著本質(zhì)上的區(qū)別的。傳統(tǒng)驗證碼本質(zhì)是人類可以理解圖片的內(nèi)容而計算機(jī)程序沒有辦法理解,這樣的想法放在十年前或者五年前還算是靠譜,但是放在現(xiàn)在這樣一個計算機(jī)程序都可以實現(xiàn)無人駕駛汽車的年代指望通過幾張模糊不清的圖就想難倒計算機(jī)程序?qū)嵲谑翘煺媪?#xff0c;同時傳統(tǒng)驗證對于正常用戶的上網(wǎng)體驗影響極大。而極驗驗證的“行為式驗證“的概念,不再出一個難題作為門檻來限制用戶,而是跟用戶做一個小小的游戲,在游戲中通過行為來判斷用戶是正常用戶還是惡意的程序請求。
我們根據(jù)收集到的海量行為數(shù)據(jù)構(gòu)建了人類行為的邊界,同時我們還動態(tài)實時地監(jiān)控每個驗證一段時間的全部驗證行為,當(dāng)這些行為的特征分布發(fā)生變化時我們的驗證也會將分布異常集中的驗證行為擋住。所以極驗驗證可以在比對手更加安全的同時對于用戶也更加友好,實現(xiàn)安全與用戶體驗的雙重提升。
?
這個圖是某一次有個網(wǎng)站受到了惡意請求,我們將收集到的數(shù)據(jù)與正常人的數(shù)據(jù)從三個維度用tsne畫出來圖,很明顯可以看出區(qū)別。正是因為極驗驗證在產(chǎn)品的用戶體驗和安全性上都完勝了傳統(tǒng)的字符驗證碼,所以在市場上也出現(xiàn)了這樣一個現(xiàn)象,一個行業(yè)中一旦有一家網(wǎng)站上線了我們的產(chǎn)品,馬上就會有很多相同行業(yè)的網(wǎng)站主導(dǎo)找到我們接入產(chǎn)品,這也反映了我們的產(chǎn)品確實解決了驗證碼長期的痛點。
我們在后期也會繼續(xù)提升技術(shù)實力,優(yōu)化體驗,為業(yè)界奉獻(xiàn)更安全、更便捷、更智慧的驗證。
主持人:技術(shù)架構(gòu)是怎樣的?用到了哪些技術(shù)呢?
黃勝藍(lán):簡單明了的一張圖,左半邊是提供驗證服務(wù)的集群,右半邊是存儲和分析日志的集群。用到的技術(shù)都是業(yè)界主流的方案,但是為了更加穩(wěn)定高效承載數(shù)萬的驗證請求并發(fā),我們在一些地方做了修改。
?
主持人:極驗驗證采用基于協(xié)程的并發(fā)方案以及獨特的緩存方案,可高效穩(wěn)定承載每天數(shù)十億次請求,能詳細(xì)介紹一下該方案么?
黃勝藍(lán):我們在不斷優(yōu)化優(yōu)化服務(wù)性能的過程中有三個最大的敵人:
- 第一個就是并發(fā)本身所帶來的開銷即新開處理線程、關(guān)閉處理線程、多個處理線程時間片輪轉(zhuǎn)所帶來的開銷。
實際上對于一些邏輯不那么復(fù)雜的場景來說這些開銷甚至比真正的處理邏輯部分代碼的開銷更大。所以我們決定采用基于協(xié)程的并發(fā)方式,即服務(wù)進(jìn)程只有一個(單cpu)所有的請求數(shù)據(jù)都由這個服務(wù)進(jìn)程內(nèi)部來維護(hù),同時服務(wù)進(jìn)程自行調(diào)度不同請求的處理順序,這樣避免了傳統(tǒng)多線程并發(fā)方式新建、銷毀以及系統(tǒng)調(diào)度處理線程的開銷。基于這樣的考慮我們選擇了基于Tornado框架實現(xiàn)api服務(wù)的開發(fā)。Tornado的實現(xiàn)非常簡潔明了,使用python的生成器作為協(xié)程,利用IOLoop實現(xiàn)了調(diào)度隊列。
- 第二個問題是數(shù)據(jù)庫的性能,這里說的數(shù)據(jù)庫包括MongoDB和Redis,我這里分開講。
先講MongoDB的問題,MongoDB主要存儲不同的用戶對于驗證的不同設(shè)置,比如該顯示什么樣的圖片。
一開始每次驗證請求都會查詢MongoDB,當(dāng)時我們的MongoDB是純內(nèi)存的,同時三臺機(jī)器組成一個復(fù)制集,這樣的組合大概能穩(wěn)定承載八九千的qps,后來隨著我們驗證量越來越大,這個承載能力逐漸就成為了我們的瓶頸。
為了徹底搞定這個問題,我們提出了最極端的解決方案,干脆直接把數(shù)據(jù)庫中的數(shù)據(jù)完全緩存到服務(wù)進(jìn)程里定期批量更新,這樣查詢的開銷將大大降低。但是因為我們用的是Python,由于GIL的存在,在8核服務(wù)器上會fork出來8個服務(wù)進(jìn)程,進(jìn)程之間不像線程那么方便,所以我們基于mmap自己寫了一套伙伴算法構(gòu)建了一個跨進(jìn)程共享緩存。自從這套緩存上線之后,Mongodb的負(fù)載幾乎變成了零。
說完了MongoDB再說Redis的問題,Redis代碼簡潔、數(shù)據(jù)結(jié)構(gòu)豐富、性能強(qiáng)大,唯一的問題是作為一個單進(jìn)程程序,終究性能是有上限的。
雖然今年Redis發(fā)布了官方的集群版本,但是經(jīng)過我們的測試,認(rèn)為這套分布式方案的故障恢復(fù)時間不夠優(yōu)秀并且運維成本較高。在Redis官方集群方案面世之前,開源世界有不少proxy方案,比如Twtter的TwemProxy和豌豆莢的Codis。這兩種方案測試完之后給我們的感覺TwemProxy運維還是比較麻煩,Codis使用起來讓人非常心曠神怡,無論是修改配置還是擴(kuò)容都可以在配置頁面上完成,并且性能也還算不錯,但無奈當(dāng)時Codis還有比較嚴(yán)重的BUG只能放棄之。
幾乎嘗試過各種方案之后,我們還是下決心自己實現(xiàn)一套分布式方案,目的是高度貼合我們的需求并且運維成本要低、擴(kuò)容要方便、故障切換要快最重要的是數(shù)據(jù)冗余一定要做好。
基于上面的考慮,我們確定基于客戶端的分布式方案,通過zookeeper來同步狀態(tài)保證高可用。具體來說,我們修改Redis源碼,使其向zookeeper注冊,客戶端由zookeeper上獲取Redis服務(wù)器集群信息并根據(jù)統(tǒng)一的一致性哈希算法來計算數(shù)據(jù)應(yīng)該存儲在哪臺Redis上,并在哈希環(huán)的下一臺Redis上寫入一份冗余數(shù)據(jù),當(dāng)讀取原始數(shù)據(jù)失敗時可以立即嘗試讀取冗余數(shù)據(jù)而不會造成服務(wù)中斷。
- 第三個問題是Python語言的性能問題,這個后面說。
主持人:您帶領(lǐng)團(tuán)隊構(gòu)建了“行為式驗證”安全模型,能談一下在這個過程中遇到了哪些困難以及大致的經(jīng)歷嗎?(包括團(tuán)隊管理、技術(shù)攻堅等方面)
黃勝藍(lán):從產(chǎn)品第一版DEMO開發(fā)出來到現(xiàn)在我們遇到了數(shù)不清的問題,現(xiàn)在回頭看可以大致分為三個階段。
- 第一個階段是在主要解決性能問題,最早DEMO是用PHP和MYSQL寫出來的,每次驗證的臨時數(shù)據(jù)也會寫入MySQL,可以說整套服務(wù)也就只能小范圍玩一玩了。隨后的幾個月時間,我們圍繞著提升性能對整套服務(wù)不斷進(jìn)行優(yōu)化,最后形成了用Python語言,Tornado作為框架,Redis存儲驗證臨時數(shù)據(jù),MongoDB作為數(shù)據(jù)庫的架構(gòu)。
- 第二個階段是解決數(shù)據(jù)統(tǒng)計與分析的問題,搞定了服務(wù)的性能問題之后,用戶慢慢多了起來,相應(yīng)產(chǎn)生的日志也就越來越多。根據(jù)日志準(zhǔn)確快速統(tǒng)計相關(guān)數(shù)據(jù)、實時監(jiān)控行為分布以及試驗安全模型所需要大量計算能力的問題又出現(xiàn)在我們面前。為了解決這樣的問題,我們用建立起自己的運算集群,由Flume收集日志,Spark與Storm分別進(jìn)行批處理與流處理,HDFS永久存儲,Ceph臨時存儲,Mesos進(jìn)行調(diào)度。
- 第三個階段是我們對于數(shù)據(jù)與模型的理解,在提供驗證服務(wù)的同時我們也在不斷根據(jù)收集到的數(shù)據(jù)來更新我們的模型使得驗證更加安全,破解更加困難。
而在這個過程中最大的困難在于我們對于我們對于模型與特征的理解。機(jī)器學(xué)習(xí)的算法做的都是一件事情即根據(jù)訓(xùn)練樣本在特征空間中尋找一個分類面來分割空間,然后利用這個分類面預(yù)測新樣本。不同的方法采用不同的數(shù)學(xué)模型來構(gòu)建這個分類面,不同數(shù)學(xué)模型有著不同的表達(dá)能力,繪制出來的分類面形狀和特性就會不同,而如何在選擇合適的模型或者合適的模型組合訓(xùn)練準(zhǔn)確、有泛化性分類器就需要對數(shù)據(jù)有著深入的理解。
團(tuán)隊的管理方面我們也在不斷探索如何構(gòu)建一套科學(xué)合理的考核評價體系,從而使得項目按時完成的同時保持團(tuán)隊的激情與探索欲望。這方面等會大家可以多多交流。
主持人:請結(jié)合實際情況,談?wù)凱ython的多種形式優(yōu)化。
黃勝藍(lán):Python這個語言確實有點讓人又愛又恨,Python的語法、Python無比成熟的生態(tài)環(huán)境都是Python的優(yōu)點。可以說對于一個互聯(lián)網(wǎng)公司Python幾乎可以滿足所有的業(yè)務(wù)需求,從web到自動化運維工具再到數(shù)據(jù)分析和機(jī)器學(xué)習(xí),Python都可以搞定。但是Python的問題也很明顯,也就是它的性能問題。
好在現(xiàn)在Python世界也涌現(xiàn)出來了適用各種各樣情況下的性能優(yōu)化手段,我在這里結(jié)合我們遇到的實際情況簡單介紹幾個我們用到的。
- 1)使用C編寫Python擴(kuò)展或者使用Cython。這兩種方式我們都有采用,也是業(yè)界比較常用的優(yōu)化Python性能的方式。這里面主要說一下Cython,優(yōu)化程序性能的本質(zhì)實際上是在平衡程序員時間和機(jī)器運算時間的成本,而利用Cython則可以非常靈活地尋找這中間的平衡。Cython可以使用介于Python和C之間的語法,當(dāng)語法更接近Python時獲得的性能提升也就越少,而語法越接近于C時,性能也更加接近C。
- 2)使用pypy。這是一個支持jit的Python解釋器,其官方測試結(jié)果比較好看,就我們實際測試結(jié)果來看它的性能優(yōu)勢不是很穩(wěn)定,大部分項目是領(lǐng)先的但是有的項目又會莫名其妙的很慢。并且它對于C的擴(kuò)展支持不佳。
- 3)使用Numba。對于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)有過了解的人一定會聽說過Numpy,Numba就是專門用來優(yōu)化基于Numpy程序的工具。利用它可以只加入一行代碼就將性能提升數(shù)倍,而缺點就是這種方式不能作為通用的優(yōu)化手段,并且Numba雖然使用起來比較簡單,但其依賴相對復(fù)雜,部署起來會有點麻煩。
主持人:數(shù)據(jù)分析方面,請您談一談如何利用gpu加速數(shù)據(jù)分析。
黃勝藍(lán):很多人可能會覺得gpu編程是一件很困難的事情,其實當(dāng)真正接觸了之后就會了解到讓你的程序在gpu上運行其實并不難,真正的難點在于理解gpu的特性從而將最合適的任務(wù)交給gpu來做,同時采用合適的優(yōu)化手段。
以我們?yōu)槔?#xff0c;我們利用PyOpenCl將日志中用戶的驗證行為進(jìn)行特征計算。計算流程中上下文的創(chuàng)建、任務(wù)隊列的創(chuàng)建以及緩沖區(qū)的控制都通過Python來控制,kernel部分由C寫。
這里面相對麻煩一點的是緩沖區(qū)的問題,因為cpu和gpu是兩套獨立的內(nèi)存,數(shù)據(jù)要拷貝才能進(jìn)行計算,這部分代碼PyOpenCl封裝的比較好,借用了NumPy的數(shù)據(jù)類型,操作起來會比用C寫方便很多。
其中最核心部分是kernel,也就是將會運行在GPU上的代碼,其實這部分代碼的編寫也不需要掌握什么特殊技能,我們的做法就是幾乎移植了在CPU上的版本,只是在GPU上多條數(shù)據(jù)同時一起計算而已。
所以就像前面說的,找到合適的任務(wù)用gpu進(jìn)行計算其實并不是一件很困難的事情。那么什么樣的任務(wù)比較適合gpu上進(jìn)行計算呢?我簡單歸納一下就是任務(wù)邏輯相對簡單(因為第一kernel要用C寫,太復(fù)雜的邏輯寫起來還是有點麻煩。第二優(yōu)化和調(diào)試起來相對麻煩),重復(fù)性高的任務(wù)。比如排序、統(tǒng)計、查找、過濾、簡單的預(yù)處理等等。
主持人:深度學(xué)習(xí)技術(shù)方案的選擇方面,有哪些思考?
黃勝藍(lán):深度學(xué)習(xí)是目前機(jī)器學(xué)習(xí)領(lǐng)域最大的熱門,也是互聯(lián)網(wǎng)巨頭們爭相角逐的戰(zhàn)場。對于中小企業(yè)而言,雖然可能沒有實力聘請頂尖的研發(fā)人員、沒有能力獲取頂尖的運算能力但是這并不意味著一定會無緣深度學(xué)習(xí)所帶來的變革。
目前開源的深度學(xué)習(xí)框架非常多,利用這些開源的深度學(xué)習(xí)庫可以非常方便的構(gòu)建一個神經(jīng)網(wǎng)絡(luò)并進(jìn)行實驗。
Python也為我們提供了探索深度學(xué)習(xí)世界非常有用的工具,我們使用了兩個東西,一個是Theano,另一個叫做Kares。
Theano是一個數(shù)學(xué)表達(dá)式編譯器,對于普通程序員來說可能會對這個概念很奇怪,實際上很簡單,它可以把一系列數(shù)學(xué)表達(dá)式以及相應(yīng)的符號鏈接編譯成可執(zhí)行代碼,而這個可執(zhí)行代碼還不僅僅是cpu,它同樣可以編譯出gpu可執(zhí)行代碼。所以基于這樣的工具,我們就可以實現(xiàn)從數(shù)學(xué)表達(dá)式自動編譯成gpu上的可執(zhí)行代碼,是不是很爽!
再來看Kares,它是一個深度學(xué)習(xí)庫,它將大牛們提出的各種網(wǎng)絡(luò)結(jié)構(gòu)、激活函數(shù)、Cost Function、以及各種Trick做了統(tǒng)一的整理和封裝,可以用及其簡單的方式將各種方法組合成為一個神經(jīng)網(wǎng)絡(luò)進(jìn)行實驗,這個庫的底層是基于Theano的,也就是利用Theano將表達(dá)式編譯成了gpu代碼,所以當(dāng)你真正想去做深度學(xué)習(xí)的實驗時你就會發(fā)現(xiàn)用這些工具其實可以非常非常快就構(gòu)建一個實驗項目。
當(dāng)然,不是有了這些工具就意味著探索深度學(xué)習(xí)的道路會一帆風(fēng)順。理論方面,不僅要透徹了解神經(jīng)網(wǎng)絡(luò)背后的數(shù)學(xué)模型,更要緊跟業(yè)界動態(tài),不斷學(xué)習(xí)最新的理論與技巧;實踐方面,訓(xùn)練出一個優(yōu)秀的網(wǎng)絡(luò)往往需要大量的試驗,嘗試不同的網(wǎng)絡(luò)結(jié)構(gòu)、trick與超參數(shù),復(fù)雜的網(wǎng)絡(luò)往往需要更大量的數(shù)據(jù)來反向傳播更新權(quán)值,這些意味著對于運算能力、數(shù)據(jù)存儲能力都是極大的考驗。
探索深度學(xué)習(xí)的前提是一定要有一支高水平、全方面的團(tuán)隊!
主持人:如今互聯(lián)網(wǎng)時代給各行各業(yè)帶來了巨大的變革,同時也加劇了行業(yè)從業(yè)者浮躁的心態(tài),該如何沉下心來做事,并不斷提升技術(shù)能力?
黃勝藍(lán):的確,這兩年行情比較火爆,行業(yè)對于技術(shù)人員的需求持續(xù)高漲,待遇也是水漲船高。帶來的結(jié)果就是很多技術(shù)人員在這樣環(huán)境下變得浮躁起來,不再深究代碼的優(yōu)化、常常把新技術(shù)掛在嘴邊卻不甚了解、哪些技術(shù)待遇高就學(xué)什么技術(shù)等等。
我認(rèn)為作為技術(shù)人員一定要在互聯(lián)網(wǎng)浪潮中保持危機(jī)感和廣闊的技術(shù)視野。危機(jī)感可以督促自己不迷失在眼前取得的成績而是繼續(xù)努力力爭上游。廣闊的技術(shù)視野可以讓你更加清楚認(rèn)識到業(yè)界遇到了哪些問題,又是開發(fā)了哪些項目提出了哪些方法來解決這些問題的。看清楚了業(yè)界發(fā)展的方向就可以避免在提升技術(shù)能力的道路上走彎路。
主持人:請結(jié)合你的切身體會談?wù)剟?chuàng)業(yè)路上您都有哪些收獲和思考,對于如今越來越多想要投身創(chuàng)業(yè)大海的年輕人,有什么建議?
黃勝藍(lán):創(chuàng)業(yè)是九死一生的事情,首先也確定是否有能力承受可能的失敗,這個是最大的前提。第二就是選好方向,創(chuàng)業(yè)做一件事情的時候一定要保證你是這行里面對這個行業(yè)了解最深的,否則做出來的東西一定沒什么意義。
主持人:推薦一些覺得非常不錯的資料或者書籍吧。
黃勝藍(lán):推薦一些比較基礎(chǔ)的吧學(xué)習(xí)Python建議可以看看《Python核心編程》這本書,講的比較細(xì)致。有興趣了解深度學(xué)習(xí)的話可以看看UFLDL,很經(jīng)典的一個教程?http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
互動環(huán)節(jié):“跟用戶做一個小小的游戲,在游戲中通過行為來判斷用戶是正常用戶還是惡意的程序請求”這里提的惡意程序的行為,能說一下嗎?黃勝藍(lán):我們的驗證是利用一個拼圖游戲來收集用戶的行為,正常人類的行為由于受到肌肉結(jié)構(gòu)、鼠標(biāo)等等限制會符合一些特征,而攻擊者在模擬行為時則很難完全模擬。我們通過這樣的原理來區(qū)分正常用戶還是程序。 互動環(huán)節(jié):您好,謝謝分享。 我想請教一下,Python與PHP這兩種語言相比,Python的主要優(yōu)勢是什么?對電商行業(yè)應(yīng)用而言,您對技術(shù)選型的建議是什么?謝謝。
黃勝藍(lán):php是世界上最好的語言。?比較這兩門語言,我們不談?wù)撜Z言本身的優(yōu)劣,因為這些仁者見仁智者見智。?
我從另一個方面講一下我的理解,Python的社區(qū)整體用戶層次相對較高,涉及的領(lǐng)域非常全面。而PHP的社區(qū)基本還局限在web開發(fā)方向。對于電商行業(yè)而言,最開始可能實現(xiàn)web邏輯也就夠了,但是規(guī)模起來之后要做推薦系統(tǒng)、反欺詐系統(tǒng)的時候PHP就完全不能滿足要求了。用Python的話則永遠(yuǎn)跟得上需求,各種問題都能搞定。 互動環(huán)節(jié):您好,能說說做為一個cto,第一公司工作職責(zé),第二如何能像bat這樣的大公司技術(shù)看齊,謝謝。
黃勝藍(lán):cto這個職位可能在不同的公司職責(zé)都不太一樣,甚至在一家創(chuàng)業(yè)公司不同時期都會發(fā)生很大的變化。團(tuán)隊小時候可能需要引領(lǐng)技術(shù)方向,大一點之后就要做好技術(shù)管理。?
第二個問題,像bat看齊我覺得毫無必要,業(yè)務(wù)不同規(guī)模不同。 互動環(huán)節(jié):首先感謝黃總的分享? 看到黃總用了很多開源技術(shù) 大家知道現(xiàn)在谷歌的技術(shù)還有推特的技術(shù)可能要翻墻 黃總有沒有好的翻墻工具 可以推薦。
黃勝藍(lán):翻墻工具我們一般用shadowsocks。 互動環(huán)節(jié):我想請教一下,您用python做過什么有趣的項目來提高對高并發(fā)或是python的熟練度?我現(xiàn)在可以使用python實現(xiàn)一些簡單的腳本,不知道現(xiàn)在我應(yīng)該哪些方面來提高自己對python的認(rèn)識和熟練?
黃勝藍(lán):我用python做的最有趣的項目就是寫了極驗驗證的后臺代碼。對python的理解和認(rèn)識其實多看看書就行了,更重要的是了解python的重量級項目。如果做數(shù)據(jù)挖掘就一定要熟悉numpy、scipy這樣的項目。 互動環(huán)節(jié):貴公司的產(chǎn)品我好像也用過 尤其是拖拽式模式感覺挺好!想提問下 驗證一旦出問題玩不了? 對客戶網(wǎng)站的整個業(yè)務(wù)流程影響很大? 會終止在那兒 請問是如何保證高可用的?? 比如有沒有多區(qū)域部署。
黃勝藍(lán):高可用方面我們的有多區(qū)部署。同時我們也考慮到驗證所處的關(guān)鍵地位,在我們的sdk中也包含了服務(wù)異常處理流程,會切換成一個本地版驗證,保證正常用戶不受影響。 互動環(huán)節(jié):你們的驗證碼能更好的識別機(jī)器和人嗎?可以簡單說說你們判斷機(jī)器和人的機(jī)制嗎?
黃勝藍(lán):我們的驗證是利用一個拼圖游戲來收集用戶的行為,正常人類的行為由于受到肌肉結(jié)構(gòu)、鼠標(biāo)等等限制會符合一些特征,而攻擊者在模擬行為時則很難完全模擬。我們通過這樣的原理來區(qū)分正常用戶還是程序。 互動環(huán)節(jié):tornado我們也有在用,作為游戲的login服務(wù)器時,有個問題,協(xié)程這種協(xié)作式工作流程會使得一次用戶請求在yield之后,被其它協(xié)程占用cpu,最后導(dǎo)致該請求處理時間變長。這種場景你們有處理嗎?
黃勝藍(lán):以前遇到過這樣的問題。這樣的問題一般是代碼邏輯中存在阻塞時間較長的部分,如果是io或者網(wǎng)絡(luò)導(dǎo)致的阻塞可以通過換成異步驅(qū)動搞定。如果是某些代碼長期占用cpu計算,可以考慮把這部分代碼通過celery或者其他任務(wù)隊列扔給其他機(jī)器去處理。?
還有一種情況是,即使用了異步驅(qū)動,后端數(shù)據(jù)庫處理不過來這么多請求導(dǎo)致掛起的協(xié)程越來越多,最后大量出現(xiàn)超時或者錯誤。
想與業(yè)界大咖零距離溝通,歡迎加入CTO講堂微信群,參與CTO講堂!
- 第1期:APICloud聯(lián)合創(chuàng)始人兼CTO鄒達(dá):??以API為核心的移動應(yīng)用云大發(fā)展時代;
- 第2期:UPYUN CTO黃慧攀:??云加速和技術(shù)成長那些事兒;
- 第3期:億方云科技創(chuàng)始人兼CEO程遠(yuǎn):??Box首位華人核心工程師的回國創(chuàng)業(yè)之路;
- 第4期:UCloud聯(lián)合創(chuàng)始人兼CTO莫顯峰:??如何成長為技術(shù)合伙人?
- 第5期:聽云CTO Wood:??APM實現(xiàn)原理及對IT和產(chǎn)品運營的價值
- 第6期:吆喝科技CEO王曄:??美國互聯(lián)網(wǎng)公司A/B測試經(jīng)驗分享及企業(yè)技術(shù)選型探討
- 第7期:箭扣科技CEO、聯(lián)合創(chuàng)始人徐旸:??如何為App加載強(qiáng)大的通訊社交引擎?
- 第8期:金童軟件執(zhí)行長、CTO曾煉:??人工智能到底能為我們帶來什么?
- 第9期:環(huán)信即時通訊云CTO馬曉宇:??招人不易留人更難——創(chuàng)業(yè)團(tuán)隊要闖哪些關(guān)??
- 第10期:一熊科技CTO、聯(lián)合創(chuàng)始人唐曉敏:??簡說創(chuàng)業(yè)公司的技術(shù)選型,從BearyChat開發(fā)說
- 第11期:武漢綠網(wǎng)副總經(jīng)理雷葆華:??如何構(gòu)建高性能網(wǎng)絡(luò)服務(wù)平臺及生態(tài)系統(tǒng)?
- 第12期:SequoiaDB巨杉數(shù)據(jù)庫聯(lián)合創(chuàng)始人王濤:??NoSQL對未來大數(shù)據(jù)發(fā)展的意義何在?
- 第13期:fir.im 創(chuàng)始人王猛:??將‘簡單快速’滲透到移動開發(fā)測試每個環(huán)節(jié),從fir.im團(tuán)隊說起
- 第14期:多備份創(chuàng)始人陳元強(qiáng):??在線災(zāi)備革命背后的事
- 第15期:寶寶樹CTO周涵寧:??深度?廣度?淺析技術(shù)人員的職業(yè)發(fā)展之路
- 第16期:Testin聯(lián)合創(chuàng)始人、產(chǎn)品VP譚斌:??從開發(fā)到上線,一個人的兩周產(chǎn)品研發(fā)之旅
- 第17期:七牛首席架構(gòu)師李道兵:??如何構(gòu)建高可用和可伸縮的架構(gòu)?
- 第18期:EasyStack聯(lián)合創(chuàng)始人兼CTO劉國輝:??OpenStack行業(yè)實踐和發(fā)展趨勢探討
- 第19期:Foxit software技術(shù)副總靜楷:??面對世界競爭對手,如何拿到Google PDF開源項目PDFium?
- 第20期:Beecloud創(chuàng)始人黃君賢:??支付接入開發(fā)的陷阱有多深??
- 第21期:諸葛io創(chuàng)始人&CEO孔淼:?Growth Hacking背后,數(shù)據(jù)分析平臺的架構(gòu)調(diào)整
- 第22期:葉帆科技創(chuàng)始人兼CEO、微軟全球最有價值專家劉洪峰:?淺析工業(yè)級物聯(lián)網(wǎng)項目的快速開發(fā)
- 第23期:好雨云創(chuàng)始人兼CEO、原澳客網(wǎng)CTO&CEO劉凡:?微服務(wù)架構(gòu)在云端的應(yīng)用
- 第24期:星圖數(shù)據(jù)CTO崔侖:?獨家直播雙十一全網(wǎng)動態(tài)?前黑客“勞改”帶你玩轉(zhuǎn)大數(shù)據(jù)
- 第25期:兌吧聯(lián)合創(chuàng)始人兼總裁陳高維:?工具類、新聞類、視頻類等不同類型App的積分體系該如何搭建?
- 第26期:Worktile聯(lián)合創(chuàng)始人兼CTO李會軍:?揭秘高效協(xié)作工具背后的技術(shù)架構(gòu)?
- 第27期:云智慧首席架構(gòu)師高馳濤(Neeke Gao):?如何通過APM持續(xù)構(gòu)建高性能IT架構(gòu)??
- 第28期:洋蔥創(chuàng)始人吳洪聲(原DNSPod創(chuàng)始人):?密碼泄露事件頻發(fā)?探秘其背后的本質(zhì)?
- 第29期:云信CreditCloud CTO朱家波:?探秘互聯(lián)網(wǎng)金融產(chǎn)品開發(fā)的技術(shù)路線圖
【CTO講堂第31期預(yù)告】
分享主題:SaaS云端語音通信架構(gòu)詳解
分享嘉賓:容聯(lián)七陌CTO ?張楊
嘉賓簡介:張楊,現(xiàn)任容聯(lián)七陌CTO。2007年畢業(yè)于北京理工大學(xué)計算機(jī)專業(yè),同年加入合力億捷歷任研發(fā)工程師、項目經(jīng)理、研發(fā)主管、研發(fā)經(jīng)理、研發(fā)總監(jiān)。2014年與上司合力億捷CTO蔡質(zhì)彬離開合力,創(chuàng)立容聯(lián)七陌任職CTO。主要負(fù)責(zé)基于Asterisk 和Freeswitch 開發(fā)容聯(lián)七陌的核心軟件交換平臺,研發(fā)軟交換平臺核心BOSS計費系統(tǒng)、后臺運營管理系統(tǒng)。
公司簡介:容聯(lián)七陌是一家專注在企業(yè)通訊領(lǐng)域的SAAS云服務(wù)提供商,公司不僅為企業(yè)提供專業(yè)的云端通訊產(chǎn)品服務(wù),更有平臺層通訊能力集成服務(wù)。公司憑借在中國呼叫中心領(lǐng)域十年的積累,自主研發(fā)了基于云端的呼叫中心通訊平臺,同時結(jié)合客戶的使用場景提供:云客服、云電銷、云總機(jī)、云會議等企業(yè)通訊產(chǎn)品,平臺用戶涵蓋客服坐席、銷售坐席、企業(yè)總機(jī)等客戶,公司企業(yè)客戶涵蓋金融、教育、互聯(lián)網(wǎng)、O2O、汽車、醫(yī)療等多個行業(yè)。
分享時間地點:1月7日(本周四)10:30 , CTO講堂群
加入方式:掃描二維碼加“C粉兒小助手”好友,申請入群。
還不是CTO俱樂部成員的各公司技術(shù)負(fù)責(zé)人,歡迎立即加入俱樂部:cto.csdn.net?。
更多俱樂部動態(tài),歡迎掃碼關(guān)注微信號:
本文為CSDN原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請聯(lián)系market#csdn.net(#換成@)
總結(jié)
以上是生活随笔為你收集整理的如何用Python一门语言通吃高性能并发、GPU计算和深度学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统中常用算法 以及优点缺点对比
- 下一篇: 深度学习:推动NLP领域发展的新引擎