tensorboard默认在根目录运行,浏览器访问127.0.0.1:6006打开界面。
如果想在子目录运行,那么可以这么执行
tensorboard --logdir ./logs --path_prefix=/app/asd
然后浏览器既可以通过 http://localhost:6006/app/asd/来访问。
但这么做遇到一个问题
下载文件时,会提示文件不存在,原因是因为下载路径缺少了我添加的“/app/asd”路径,此时可以找到tensorboard的安装路径。
Linux的conda默认安装路径是/opt/conda/lib/python3.10/site-packages/tensorboard/
找到webfiles.zip,千万不要解压后修改再打包,必须双击zip文件,然后用记事本打开index.js文件。
文件中搜索:“data/plugin/scalars”
然后在代码
return`/experiment/${a}/data/plugin/scalars/scalars?${new URLSearchParams({tag:i,run:s,format:o})}`}}
前面添加:
var baseUrl = window.location.origin + window.location.pathname;
然后将
return`/experiment/${a}/data/plugin/scalars/scalars?${new URLSearchParams({tag:i,run:s,format:o})}`}}改为:return`${baseUrl}experiment/${a}/data/plugin/scalars/scalars?${new URLSearchParams({tag:i,run:s,format:o})}`}}
此时就能在下载路径前自动加上我们的子目录路径。
方法二:
如果不想修改密码,那么可以通过nginx来反代。
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /tensorboard {proxy_pass http://127.0.0.1:6006/app;}location ^~ /experiment/defaultExperimentId/data/plugin/scalars/scalars {if ($http_referer ~* "^(https?://[^/]+)([^?]+)?(\?.*)?$") {set $referer_uri $2;}set $downurl "experiment/defaultExperimentId/data/plugin/scalars";rewrite ^/experiment/defaultExperimentId/data/plugin/scalars(.*)$ $referer_uri$downurl$1 last;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
其中最关键的代码就是:
location ^~ /experiment/defaultExperimentId/data/plugin/scalars/scalars {if ($http_referer ~* "^(https?://[^/]+)([^?]+)?(\?.*)?$") {set $referer_uri $2;}set $downurl "experiment/defaultExperimentId/data/plugin/scalars";rewrite ^/experiment/defaultExperimentId/data/plugin/scalars(.*)$ $referer_uri$downurl$1 last;
}
原理其实就是,通过正则表达式获取当前网址的uri然后加到文件下载路径(experiment/defaultExperimentId/data/plugin/scalars)之前。
参考:nginx设置tensorboard转发服务 - 知乎 (zhihu.com)