你需要登錄雲伺服器管理控制台,記錄被我打馬賽克位置的公網ip。
登錄伺服器
windows推薦下putty進行連接遠程伺服器,linux和macos不需要那麼麻煩,ssl就行了。
putty
在下圖的host name中輸入你的公網IP,點擊open。
putty界面
輸入密碼,看不見輸入不要慌,linux就是這樣保護安全的。
Paste_Image.png
登錄成功界面見下圖,然後想怎麼操作就怎麼操作了。
登陸成功界面
運行我的python文件
推薦FileZilla進行文件傳輸(不具體說明了),我上傳了我的flask網站項目
我的項目
記住伺服器同時有Python2和Python3,
python
運行的時候記得使用合適的版本,我用的是虛擬環境(自行網路如何創建虛擬環境)
在運行python之前先安裝一個screen,他可以將一個程序在後台運行
sudo apt-get install screen
運行python文件,成功後按下ctrl+A和ctrl+D可以隱藏。隱藏後可以輸入screen -r 恢復。
運行成功
2. 深度學習跑700多張圖片的數據集,租什麼樣的伺服器比較好
珍島GPU雲伺服器。
珍島GPU雲伺服器適用於深度學習,針對AI,數據分析在各種規模上實現出色的加速,應對極其嚴峻的計算挑戰,同時珍島雲提供多種GPU實例規格。
3. 怎麼使用雲伺服器刷網課
1、雲伺服器上需有一個公網IP地點位置
2、在雲伺服器上安裝web伺服器。
3、開發一個官方網站,將網課連接放到官方網站的列表中。
4、申請一個域名地點位置其實就是常說的官方網站地點位置。
5、將這個官方網站公布出去。並將域名綁定到這個購買IP地點位置。
6、用瀏覽器打開這個官網網址時,完全就能夠看到網頁上產生了網課的鏈接,點擊鏈接完全就能夠播放網課。
4. 怎麼把java項目部署到雲伺服器
小鳥雲企業級高可用雲伺服器、雲虛擬主機、網站伺服器租用託管服務提供商,一站式雲計算解決方案,彈性靈活、按需付費,輕松助力企業及個人雲端部署!
我們要部署 Java Web 項目,那就至少得將項目上傳到雲伺服器。其實過程很簡單,基本上也就是下面三個步驟:
① 打包上傳:將項目打包成 war 文件,然後利用傳到遠程伺服器(在Eclipse中直接將項目導出為.war文件)。
② 將 war 文件移動到 Tomcat 目錄下的 webapps 下。
③ 重啟 Tomcat,訪問我們的項目。
在這個過程中,我們需要注意。因為一般而已,作為一個 Web 項目,我們肯定是有資料庫的使用的。那麼資料庫部分怎麼辦呢?其實,只需要將我們已有的資料庫轉儲為 sql 文件,然後將 sql 文件上傳到雲伺服器上執行即可。以 mysql 為例,如下操作:
① 轉儲為 sql 腳本,並上傳:先在本地將我們項目使用的資料庫轉為 sql 文件,上傳到雲伺服器上 (可以利用 Navicat 將資料庫轉儲為.sql文件)。
② 執行 sql:然後進入 mysql 中執行該 sql 文件。(若伺服器裝有Navicat,可直接用Navicat執行.sql文件,執行前需要選中存放表的資料庫,應該與代碼中資料庫連接語句包含的資料庫名保持一致)
5. 學生能去哪裡租用便宜的gpu雲伺服器來進行深度學習計算
其實你可以去騰訊雲去租用GPU雲伺服器來進行深度學習計算。騰訊雲 GPU 實例類型眾多,應用廣泛,不同的實例類型有不同的產品定位。用戶可以根據自身的應用場景,結合性能、價格等因素,選擇最符合業務需求的實例。
比如你要進行深度學習計算,建議使用騰訊雲GN8/GN10X 實例。GN10Xp配備Tesla V100 NVLink 32GB GPU,具有強大的單精度浮點運算能力,並具備較大的 GPU 板載內存。最大實例規格配置8個 V100 ,80個 vGPU 和320GB主機內存,是深度學習訓練的首選。
GN10Xp 最大實例規格具備125.6 TFLOPS 單精度浮點運算能力,支持 Tensor Core 加速,單卡搭載32GB顯存,GPU 卡之間通過300GB/s的 NVLink 高速互連。強大的計算與數據吞吐能力大大縮短訓練周期,使得復雜模型的快速迭代成為可能,人工智慧相關業務得以把握先機。
騰訊雲GPU雲伺服器,管理很簡單GPU雲伺服器採用和雲伺服器CVM一致的管理方式,無需跳板機登錄,簡單易用。清晰的顯卡驅動的安裝、部署指引,免去高學習成本。而且節約成本,你無需預先採購、准備硬體資源,一次性購買,免除硬體更新帶來的額外費用,有效降低基礎設施建設投入。目前,騰訊雲的GPU雲伺服器已全面支持包年包月計費和按量計費,你可以根據需要選擇計費模式。
6. 實驗室沒有伺服器如何跑深度學習模型
實驗室沒有伺服器可以用Googlecolab跑深度學習模型。具體操作步驟如下:
1、創建colab文件:進入Google雲盤後,創建一個colab文件。第一次使用,會存在colab選項不顯示的情況,點擊關聯更多應用即可。點擊colab選項後會跳轉到一個頁面,與jupyter基本一模一樣,可輸入代碼段,能連接伺服器,有文件目錄、colab文件名和使用選項。
2、配置colab環境:點擊修改後點擊筆記本設置就可以配置gpu了,硬體加速器選擇gpu,點擊連接即配置好環境,將Googledrive的雲空間連接起來,就有了drive文件夾,現在配置已經全部完成。
3、配置完成就可以使用Googlecolab跑深度學習模型了,gpu是k80計算速度慢,可以再新建一個colab文件,兩三次就可以開到p100了。gpu用完的場景,需要1天時間恢復,可以再弄一個谷歌賬號重復上述操作。
7. 如何在後台部署深度學習模型
搭建深度學習後台伺服器
我們的Keras深度學習REST API將能夠批量處理圖像,擴展到多台機器(包括多台web伺服器和Redis實例),並在負載均衡器之後進行循環調度。
為此,我們將使用:
KerasRedis(內存數據結構存儲)
Flask (Python的微web框架)
消息隊列和消息代理編程範例
本篇文章的整體思路如下:
我們將首先簡要討論Redis數據存儲,以及如何使用它促進消息隊列和消息代理。然後,我們將通過安裝所需的Python包來配置Python開發環境,以構建我們的Keras深度學習REST API。一旦配置了開發環境,就可以使用Flask web框架實現實際的Keras深度學習REST API。在實現之後,我們將啟動Redis和Flask伺服器,然後使用cURL和Python向我們的深度學習API端點提交推理請求。最後,我們將以對構建自己的深度學習REST API時應該牢記的注意事項的簡短討論結束。
第一部分:簡要介紹Redis如何作為REST API消息代理/消息隊列
測試和原文的命令一致。
第三部分:配置Python開發環境以構建Keras REST API
文章中說需要創建新的虛擬環境來防止影響系統級別的python項目(但是我沒有創建),但是還是需要安裝rest api所需要依賴的包。以下為所需要的包。
第四部分:實現可擴展的Keras REST API
首先是Keras Redis Flask REST API數據流程圖
讓我們開始構建我們的伺服器腳本。為了方便起見,我在一個文件中實現了伺服器,但是它可以按照您認為合適的方式模塊化。為了獲得最好的結果和避免復制/粘貼錯誤,我建議您使用本文的「下載」部分來獲取相關的腳本和圖像。
為了簡單起見,我們將在ImageNet數據集上使用ResNet預訓練。我將指出在哪裡可以用你自己的模型交換ResNet。flask模塊包含flask庫(用於構建web API)。redis模塊將使我們能夠與redis數據存儲介面。從這里開始,讓我們初始化將在run_keras_server.py中使用的常量.
我們將向伺服器傳遞float32圖像,尺寸為224 x 224,包含3個通道。我們的伺服器可以處理一個BATCH_SIZE = 32。如果您的生產系統上有GPU(s),那麼您需要調優BATCH_SIZE以獲得最佳性能。我發現將SERVER_SLEEP和CLIENT_SLEEP設置為0.25秒(伺服器和客戶端在再次輪詢Redis之前分別暫停的時間)在大多數系統上都可以很好地工作。如果您正在構建一個生產系統,那麼一定要調整這些常量。
讓我們啟動我們的Flask app和Redis伺服器:
在這里你可以看到啟動Flask是多麼容易。在運行這個伺服器腳本之前,我假設Redis伺服器正在運行(之前的redis-server)。我們的Python腳本連接到本地主機6379埠(Redis的默認主機和埠值)上的Redis存儲。不要忘記將全局Keras模型初始化為None。接下來我們來處理圖像的序列化:
Redis將充當伺服器上的臨時數據存儲。圖像將通過諸如cURL、Python腳本甚至是移動應用程序等各種方法進入伺服器,而且,圖像只能每隔一段時間(幾個小時或幾天)或者以很高的速率(每秒幾次)進入伺服器。我們需要把圖像放在某個地方,因為它們在被處理前排隊。我們的Redis存儲將作為臨時存儲。
為了將圖像存儲在Redis中,需要對它們進行序列化。由於圖像只是數字數組,我們可以使用base64編碼來序列化圖像。使用base64編碼還有一個額外的好處,即允許我們使用JSON存儲圖像的附加屬性。
base64_encode_image函數處理序列化。類似地,在通過模型傳遞圖像之前,我們需要反序列化圖像。這由base64_decode_image函數處理。
預處理圖片
我已經定義了一個prepare_image函數,它使用Keras中的ResNet50實現對輸入圖像進行預處理,以便進行分類。在使用您自己的模型時,我建議修改此函數,以執行所需的預處理、縮放或規范化。
從那裡我們將定義我們的分類方法
classify_process函數將在它自己的線程中啟動,我們將在下面的__main__中看到這一點。該函數將從Redis伺服器輪詢圖像批次,對圖像進行分類,並將結果返回給客戶端。
在model = ResNet50(weights="imagenet")這一行中,我將這個操作與終端列印消息連接起來——根據Keras模型的大小,載入是即時的,或者需要幾秒鍾。
載入模型只在啟動這個線程時發生一次——如果每次我們想要處理一個映像時都必須載入模型,那麼速度會非常慢,而且由於內存耗盡可能導致伺服器崩潰。
載入模型後,這個線程將不斷輪詢新的圖像,然後將它們分類(注意這部分代碼應該時尚一部分的繼續)
在這里,我們首先使用Redis資料庫的lrange函數從隊列(第79行)中獲取最多的BATCH_SIZE圖像。
從那裡我們初始化imageIDs和批處理(第80和81行),並開始在第84行開始循環隊列。
在循環中,我們首先解碼對象並將其反序列化為一個NumPy數組image(第86-88行)。
接下來,在第90-96行中,我們將向批處理添加圖像(或者如果批處理當前為None,我們將該批處理設置為當前圖像)。
我們還將圖像的id附加到imageIDs(第99行)。
讓我們完成循環和函數
在這個代碼塊中,我們檢查批處理中是否有圖像(第102行)。如果我們有一批圖像,我們通過模型(第105行)對整個批進行預測。從那裡,我們循環一個圖像和相應的預測結果(110-122行)。這些行向輸出列表追加標簽和概率,然後使用imageID將輸出存儲在Redis資料庫中(第116-122行)。
我們使用第125行上的ltrim從隊列中刪除了剛剛分類的圖像集。最後,我們將睡眠設置為SERVER_SLEEP時間並等待下一批圖像進行分類。下面我們來處理/predict我們的REST API端點
稍後您將看到,當我們發布到REST API時,我們將使用/predict端點。當然,我們的伺服器可能有多個端點。我們使用@app。路由修飾符以第130行所示的格式在函數上方定義端點,以便Flask知道調用什麼函數。我們可以很容易地得到另一個使用AlexNet而不是ResNet的端點,我們可以用類似的方式定義具有關聯函數的端點。你懂的,但就我們今天的目的而言,我們只有一個端點叫做/predict。
我們在第131行定義的predict方法將處理對伺服器的POST請求。這個函數的目標是構建JSON數據,並將其發送回客戶機。如果POST數據包含圖像(第137和138行),我們將圖像轉換為PIL/Pillow格式,並對其進行預處理(第141-143行)。
在開發這個腳本時,我花了大量時間調試我的序列化和反序列化函數,結果發現我需要第147行將數組轉換為C-contiguous排序(您可以在這里了解更多)。老實說,這是一個相當大的麻煩事,但我希望它能幫助你站起來,快速跑。
如果您想知道在第99行中提到的id,那麼實際上是使用uuid(通用唯一標識符)在第151行生成的。我們使用UUID來防止hash/key沖突。
接下來,我們將圖像的id和base64編碼附加到d字典中。使用rpush(第153行)將這個JSON數據推送到Redis db非常簡單。
讓我們輪詢伺服器以返回預測
我們將持續循環,直到模型伺服器返回輸出預測。我們開始一個無限循環,試圖得到157-159條預測線。從這里,如果輸出包含預測,我們將對結果進行反序列化,並將結果添加到將返回給客戶機的數據中。我們還從db中刪除了結果(因為我們已經從資料庫中提取了結果,不再需要將它們存儲在資料庫中),並跳出了循環(第163-172行)。
否則,我們沒有任何預測,我們需要睡覺,繼續投票(第176行)。如果我們到達第179行,我們已經成功地得到了我們的預測。在本例中,我們向客戶機數據添加True的成功值(第179行)。注意:對於這個示例腳本,我沒有在上面的循環中添加超時邏輯,這在理想情況下會為數據添加一個False的成功值。我將由您來處理和實現。最後我們稱燒瓶。jsonify對數據,並將其返回給客戶端(第182行)。這就完成了我們的預測函數。
為了演示我們的Keras REST API,我們需要一個__main__函數來實際啟動伺服器
第186-196行定義了__main__函數,它將啟動classify_process線程(第190-192行)並運行Flask應用程序(第196行)。
第五部分:啟動可伸縮的Keras REST API
要測試我們的Keras深度學習REST API,請確保使用本文的「下載」部分下載源代碼示例圖像。從這里,讓我們啟動Redis伺服器,如果它還沒有運行:
然後,在另一個終端中,讓我們啟動REST API Flask伺服器:
另外,我建議在向伺服器提交請求之前,等待您的模型完全載入到內存中。現在我們可以繼續使用cURL和Python測試伺服器。
第七部分:使用cURL訪問Keras REST API
使用cURL來測試我們的Keras REST API伺服器。這是我的家庭小獵犬Jemma。根據我們的ResNet模型,她被歸類為一隻擁有94.6%自信的小獵犬。
你會在你的終端收到JSON格式的預測:
第六部分:使用Python向Keras REST API提交請求
如您所見,使用cURL驗證非常簡單。現在,讓我們構建一個Python腳本,該腳本將發布圖像並以編程方式解析返回的JSON。
讓我們回顧一下simple_request.py
我們在這個腳本中使用Python請求來處理向伺服器提交數據。我們的伺服器運行在本地主機上,可以通過埠5000訪問端點/predict,這是KERAS_REST_API_URL變數(第6行)指定的。
我們還定義了IMAGE_PATH(第7行)。png與我們的腳本在同一個目錄中。如果您想測試其他圖像,請確保指定到您的輸入圖像的完整路徑。
讓我們載入圖像並發送到伺服器:
我們在第10行以二進制模式讀取圖像並將其放入有效負載字典。負載通過請求發送到伺服器。在第14行發布。如果我們得到一個成功消息,我們可以循環預測並將它們列印到終端。我使這個腳本很簡單,但是如果你想變得更有趣,你也可以使用OpenCV在圖像上繪制最高的預測文本。
第七部分:運行簡單的請求腳本
編寫腳本很容易。打開終端並執行以下命令(當然,前提是我們的Flask伺服器和Redis伺服器都在運行)。
使用Python以編程方式使用我們的Keras深度學習REST API的結果
第八部分:擴展深度學習REST API時的注意事項
如果您預期在深度學習REST API上有較長一段時間的高負載,那麼您可能需要考慮一種負載平衡演算法,例如循環調度,以幫助在多個GPU機器和Redis伺服器之間平均分配請求。
記住,Redis是內存中的數據存儲,所以我們只能在隊列中存儲可用內存中的盡可能多的圖像。
使用float32數據類型的單個224 x 224 x 3圖像將消耗602112位元組的內存。
8. 如何搭建一台深度學習伺服器
你可以去伺服器廠商,比如國內的正睿、浪潮、聯想、曙光,國外的惠普、戴爾等,找找比如深度學習、GPU計算等相關功能的產品參考或者問問就清楚了。
9. 做深度學習的伺服器需要哪些配置
主要是看運行什麼軟體和數據量,訓練數值大小,這里要強調一下,數值大小和數據量是不一樣的。
深度學習伺服器的核心部件還是CPU、硬碟、內存、GPU,特別是很多深度學習依靠GPU的大規模數據處理能力,這就要強調CPU的計算能力和數量,同時不同的數據對GPU的顯存要求也不一樣。
當下大部分都在用RTX3090做深度學習,最新RTX4090已經上市,單精度計算能力是RTX3090的2倍,這兩個GPU都是24G顯存;像A100強調雙精度計算能力,顯存有40G和80G兩個版本,而A6000單精度計算能和RTX3090差不多,顯存是48G,可以參考選擇。
當然,最重要的還是口袋裡的銀子,A6000市場價大概是RTX的2倍還要多,A100最近更是要上十萬了,估計也快買不到了,價高缺貨;RTX3090/4090的價位低,性價比高,這也是為什麼大部分人都選擇它們做深度學習了,這是市場的選擇。
10. 訓練好的深度學習模型是怎麼部署的
先說結論:部署的方式取決於需求
需求一:簡單的demo演示,只要看看效果的,像是學校裡面的demo展示這種
caffe、tf、pytorch等框架隨便選一個,切到test模式,拿python跑一跑就好,順手寫個簡單的GUI展示結果
高級一點,可以用CPython包一層介面,然後用C++工程去調用
需求二:要放到伺服器上去跑,但一不要求吞吐二不要求時延的那種,說白了還是有點玩玩的意思
caffe、tf、pytorch等框架隨便選一個,按照官方的部署教程,老老實實用C++部署,例如pytorch模型用工具導到libtorch下跑(官方有教程,很簡單)
這種還是沒有脫離框架,有很多為訓練方便保留的特性沒有去除,性能並不是最優的;
另外,這些框架要麼CPU,要麼NVIDIA GPU,對硬體平台有要求,不靈活;還有,框架是真心大,占內存(tf還占顯存),占磁碟
需求三:放到伺服器上跑,要求吞吐和時延(重點是吞吐)
這種應用在互聯網企業居多,一般是互聯網產品的後端AI計算,例如人臉驗證、語音服務、應用了深度學習的智能推薦等。由於一般是大規模部署,這時不僅僅要考慮吞吐和時延,還要考慮功耗和成本。所以除了軟體外,硬體也會下功夫,比如使用推理專用的NVIDIA P4、寒武紀MLU100等。這些推理卡比桌面級顯卡功耗低,單位能耗下計算效率更高,且硬體結構更適合高吞吐量的情況軟體上,一般都不會直接上深度學習框架。對於NVIDIA的產品,一般都會使用TensorRT來加速(我記得NVIDIA好像還有TensorRT inference server什麼的,名字記不清了,反正是不僅可以加速前傳,還順手幫忙調度了)。TensorRT用了CUDA、CUDNN,而且還有圖優化、fp16、int8量化等。反正用NVIDIA的一套硬軟體就對了
需求四:放在NVIDIA嵌入式平台上跑,注重時延
比如PX2、TX2、Xavier等,參考上面(用全家桶就對了),也就是貴一點嘛
需求五:放在其他嵌入式平台上跑,注重時延
硬體方面,要根據模型計算量和時延要求,結合成本和功耗要求,選合適的嵌入式平台。比如模型計算量大的,可能就要選擇帶GPU的SoC,用opencl/opengl/vulkan編程;也可以試試NPU,不過現在NPU支持的運算元不多,一些自定義Op多的網路可能部署不上去對於小模型,或者幀率要求不高的,可能用CPU就夠了,不過一般需要做點優化(剪枝、量化、SIMD、匯編、Winograd等)順帶一提,在手機上部署深度學習模型也可以歸在此列,只不過硬體沒得選,用戶用什麼手機你就得部署在什麼手機上23333。為老舊手機部署才是最為頭疼的上述部署和優化的軟體工作,在一些移動端開源框架都有人做掉了,一般拿來改改就可以用了,性能都不錯。
需求六:上述部署方案不滿足我的需求
比如開源移動端框架速度不夠——自己寫一套。比如像商湯、曠世、Momenta都有自己的前傳框架,性能應該都比開源框架好。只不過自己寫一套比較費時費力,且如果沒有經驗的話,很有可能費半天勁寫不好