Pytorch tensorboard/tensorboardx 安裝使用注意事項

2020/7/3

因為tensorflow 2.0 開始普及辐宾,需要時間學(xué)習(xí)適應(yīng)奄喂,所以回歸使用pytorch寫一些模型撤师。由于長時間沒有碰過pytorch了泻肯,記錄一些注意點(diǎn)渊迁。

Pytorch原本沒有像tensorboard這樣的可視化工具,為了彌補(bǔ)這一不足灶挟,就借雞生蛋琉朽,直接將tensorflow的tensorboard拿過來使用,tensorboardx就是這樣來的稚铣。換句話說箱叁,tensorboardx和tensorflow中的tensorboard是同一個東西惕医,只是讓tensorboard能在pytorch上運(yùn)行耕漱。

ps: 早期沒有tensorboardx時,pytorch通過??torch.utils.tensorboard 使用tensorboard抬伺,有些函數(shù)目前依舊是??actually processed by?torch.utils.tensorboard


Step1: 安裝

我使用的conda的虛擬環(huán)境安裝螟够,相當(dāng)于在系統(tǒng)的大盒子里面創(chuàng)造一個小盒子,把需要的東西裝進(jìn)小盒子里峡钓,隨時有問題可以把小盒子卸載不影響大盒子妓笙,tensorflow官方也推薦使用虛擬環(huán)境,雖然pytorch官方?jīng)]有這么說能岩,我還是用conda單獨(dú)新建了一個pytorch environment寞宫, 具體可以查看anaconda的官方文檔 ,搜索manage environment就行捧灰。

1. 激活pytorch虛擬環(huán)境

conda activate pytorch

2. 安裝 tensorboardx

雖然官方教程里面提到可以直接安裝tensoboardx:??

?pip?install?tensorboardX

但是安裝完后淆九,如果在命令行里面輸入:

tensorboard?--logdir?{}?--host?0.0.0.0?--port?6006?

會拋出錯誤:'tensorboard' is not recognized as an internal or external command

再次查看官網(wǎng)后發(fā)現(xiàn) tensorboardx在依舊需要tensorboard的支持?“To run tensorboard web server, you need to?install?it using: pip?install?tensorboard”.?

于是我嘗試搜索單獨(dú)只安裝tensorboard不安裝tensorflow是否可行统锤,沒有發(fā)現(xiàn)很好的方案 (類似的issue:https://github.com/tensorflow/tensorboard/issues/2438)所以還是要安裝tensorflow.?

3. 安裝tensorflow

之所以大費(fèi)周章毛俏,是因為tensorflow對cuda,python都又匹配要求饲窿,十分麻煩煌寇,既然避免不了也只能安裝,見招拆招逾雄。先檢查各種版本阀溶,我電腦上

GPU GTX1080

python 3.8

torchvision 0.6.0

pytorch 1.5.0

cuda10.2 cudnn 7.0

PS: 其實cuda 我之前安裝了多個版本, 不過pytorch安裝對應(yīng)的是10.2

cuda 版本

然后直接安裝tensorflow, 我原來用過多個版本的tensorflow1.0腻脏,后面的版本(至少我現(xiàn)在用的1.14)在安裝的時候都自動安裝了tensorboard,所以不需要單獨(dú)安裝tensorboard?

pip install tensorflow

這里也可以明確版本號

pip install tensorflow = 1.14

或者使用conda安裝, 理論上也可以银锻,可能出錯幾率更小一些永品,但是我沒有嘗試過。

理論上安裝已經(jīng)完成了击纬,但是如果tensorflow版本不對鼎姐,會出現(xiàn)一些問題,比如我直接用pip沒有明確版本號更振, 結(jié)果

tensorflow 2.2.0

tensorboard 2.2.2

高版本很容易出錯炕桨,不穩(wěn)定不兼容問題頻繁,在我運(yùn)行tensorboard的時候就出現(xiàn)了一些問題

step 2: 運(yùn)行

1. 選擇可視化變量

在模型代碼里面要選擇可視化的變量肯腕, 具體做法是首先import?SummaryWriter, 這個就是定義一份名單献宫,告訴tensorboard你要可視化哪些變量

from tensorboardX import SummaryWriter

然后明確一個 writer 去申明這些變量,把這些變量保存成一個event实撒,可以理解為一份名單

writer=SummaryWriter(logdir=None姊途, comment='')

logdir 是 event 的存儲路徑, 默認(rèn)在你代碼運(yùn)行目錄下新建一個runs文件夾,每次 "run" 產(chǎn)生一個份名單 (event) 存儲成名為當(dāng)前時間文件夾下的一個文件奈惑,runs/CURRENT_DATETIME_HOSTNAME??

例如

runs\Jul03_10-46-30_DESKTOP-0H5RF/events.out.tfevents.1593791190.DESKTOP-0H5RFM1?

通過改變logdir, 可以改變存儲路徑吭净, 也就不會新建runs文件夾

comment就是改變event存儲的文件名, 如果之前是CURRENT_DATETIME_HOSTNAME ,加了comment之后肴甸, 比如comment=’51HAHA‘, 就會變成CURRENT_DATETIME_HOSTNAME51HAHA. 另外如果申明了logdir, comment就沒有用了寂殉, 可以直接用路徑直接指定一個文件夾, 比如

writer=SummaryWriter(logdir=’./runs/Jul03_10-46-30_Hahaha‘)

另外writer新建后要記得關(guān)閉避免資源浪費(fèi)

writer.close()

writer.flush()

或者直接用with實現(xiàn)

with SummaryWriter(comment='Haha')as w:

????w.add_graph(model, dummy_input,True)

tensorbord有多種添加變量方式原在,比如scalar等

writer.add_scalar("loss", total_loss, epoch)

申明變量名稱友扰,變量 , iteration相當(dāng)于你的x軸是什么

2. 打開tensorboard

重開一個Anaconda prompt命令行庶柿,激活環(huán)境

conda activate pytorch

輸入命令打開tensorboard

tensorboard?--logdir=your_log_dir --host?0.0.0.0?--port?6006?

tensorboard --logdir=./log --host $SERVER_IP --port $SERVER_PORT

your_log_dir必須和之前writer的logdir完全一致村怪,默認(rèn)是./runs

為了避免麻煩,也可以寫絕對路徑浮庐; --host 是指定服務(wù)監(jiān)聽的IP甚负, --port是指定服務(wù)的端口, 在自己電腦上其實IP可以不用指定审残,remote的時候可能需要特別的IP

在自己電腦上直接

tensorboard?--logdir=F:\projects\TRY\runs? --port?6006?

然后在瀏覽器里面打如網(wǎng)址

http://localhost:6006/

tensorboard就出來了


tensorboard 運(yùn)行前

程序沒運(yùn)行前梭域,會這樣顯示,運(yùn)行后


tensorboard運(yùn)行后

3. 幾個小坑

由于tensorboard繼承tensorflow的傳統(tǒng)搅轿,版本不匹配問題一定存在病涨。


比如說在安裝完tensorflow后, 運(yùn)行

tensorboard?--logdir=your_log_dir --host?0.0.0.0?--port?6006?

雖然tensorboard成功運(yùn)行了璧坟,但會給出這樣的提示

load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found

Ignore above cudart dlerror if you do not have a GPU set up on your machine.

原因很簡單既穆,我cuda使用10.2赎懦,所以在10.2cuda里面沒找到cudart64_101.dll

解決方法:

1. 我在網(wǎng)上看到有人直接把CUDA\v10.2\bin里面的cudart64_102.dll復(fù)制了一份,并且改名叫cudart64_101.dll和cudart64_102.dll放在一起幻工,據(jù)說完美運(yùn)行

2.因為我有多個cuda版本励两,包括10.1? 我直接在10.1的bin里面找到了cudart64_101.dll,復(fù)制到了10.2的bin里面囊颅,問題就解決了


writer.add_graph不能使用伐蒋,有兩種情況

1. 使用pytorch的dataloader時,data包括輸入的x和label迁酸,如果直接

example: pred = model(data)

add_graph(model, data)

會報錯?

RuntimeError: Type 'Tuple[Tensor, bool]' cannot be traced. Only Tensors and (possibly nested) Lists, Dicts, and Tuples of Tensors can be traced (toTraceableIValue at ../torch/csrc/jit/pybind_utils.h:298)

必須把模型的輸入改成x, y

example: pred = model(x, y)

add_graph(model, x)

pytorch負(fù)責(zé)開發(fā)的人員也對這個問題有回復(fù)https://github.com/lanpa/tensorboardX/issues/520

總之就是要用tensorboard先鱼,代碼格式要進(jìn)行一些修改,個人覺得如果能直接add_graph(model)不需要其他的參數(shù)就好了


還有一個坑也是add_graph的奸鬓,這就是純粹的版本不匹配無法顯示graph, 具體效果就是我上面那張圖焙畔,只有兩個空白框

網(wǎng)上有不少出現(xiàn)這種問題的, 例如

https://github.com/pytorch/pytorch/issues/24157

有嘗試用降級版本解決的

https://blog.csdn.net/caiguanhong/article/details/106924606

好在scalar能正常顯示串远,還是等官方修復(fù)bug吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宏多,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澡罚,更是在濱河造成了極大的恐慌伸但,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件留搔,死亡現(xiàn)場離奇詭異更胖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隔显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門却妨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人括眠,你說我怎么就攤上這事彪标。” “怎么了掷豺?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵捞烟,是天一觀的道長。 經(jīng)常有香客問我当船,道長题画,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任生年,我火速辦了婚禮婴程,結(jié)果婚禮上廓奕,老公的妹妹穿的比我還像新娘抱婉。我一直安慰自己档叔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布蒸绩。 她就那樣靜靜地躺著衙四,像睡著了一般。 火紅的嫁衣襯著肌膚如雪患亿。 梳的紋絲不亂的頭發(fā)上传蹈,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音步藕,去河邊找鬼惦界。 笑死,一個胖子當(dāng)著我的面吹牛咙冗,可吹牛的內(nèi)容都是我干的沾歪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雾消,長吁一口氣:“原來是場噩夢啊……” “哼灾搏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起立润,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤狂窑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桑腮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泉哈,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年破讨,在試婚紗的時候發(fā)現(xiàn)自己被綠了旨巷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡添忘,死狀恐怖采呐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搁骑,我是刑警寧澤斧吐,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站仲器,受9級特大地震影響煤率,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乏冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一蝶糯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辆沦,春花似錦昼捍、人聲如沸识虚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽担锤。三九已至,卻和暖如春乍钻,著一層夾襖步出監(jiān)牢的瞬間肛循,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工银择, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留多糠,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓浩考,卻偏偏與公主長得像熬丧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子怀挠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354