<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          有沒(méi)有什么可以節(jié)省大量時(shí)間的 Deep Learning 效率神器?

          共 4457字,需瀏覽 9分鐘

           ·

          2022-12-21 22:28

          點(diǎn)擊上方視學(xué)算法”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          作者丨金瀛若愚@知乎(已授權(quán))
          來(lái)源丨h(huán)ttps://www.zhihu.com/question/384519338/answer/2620482813 
          編輯丨極市平臺(tái)

          導(dǎo)讀

           

          隆重安利Wandb+Hydra+Plotly 組合大法。這三個(gè)哥能讓你的調(diào)參俠生涯如沐春風(fēng)。 

          1. 每個(gè)實(shí)驗(yàn)保存完整config + wandb遠(yuǎn)程追蹤

          還在給model取巨長(zhǎng)的文件名來(lái)記錄其超參嗎?out了。wandb可以把config和結(jié)果曲線同步云端供橫向評(píng)比和查看。同步云端的代碼:

          def wandb_init(cfg: DictConfig):
              wandb.init(
                  project='best paper',
                  group=cfg.exp_group,
                  name=cfg.exp_name,
                  notes=cfg.exp_desc,
                  save_code=True,
                  config=OmegaConf.to_container(cfg, resolve=True)
              )
              OmegaConf.save(config=cfg, f=os.path.join(cfg.ckpt_dir, 'conf.yaml'))

          這里的OmegaConf下面會(huì)講到。想不起來(lái)某個(gè)實(shí)驗(yàn)的model存在哪了?看wandb的界面查找每個(gè)config值

          wandb 查看config

          對(duì)應(yīng)每個(gè)實(shí)驗(yàn)的curves

          wandb查看曲線

          2. Hydra+OmegaConf配置管理

          OmegaConf是Meta出的配置管理工具,可將yaml文件轉(zhuǎn)成有對(duì)應(yīng)變量名的Python的class或dict。支持默認(rèn)值、合并和override、導(dǎo)出成yaml或json等,十分好用。你再也不用手寫配置管理了。

          比如:

          blob_root: /yjblob
          exp_name: best_paper_2
          ckpt_dir: ${.blob_root}/${.exp_name}/ckpt
          log_dir: ${.blob_root}/${.exp_name}/log

          上面是config.yaml的片段,OmegaConf.resolve(cfg) 一句即可把blob_root和exp_name 的值填進(jìn) ckpt_dir里。而普通的yaml是不支持變量的。

          Hydra是Meta出的實(shí)驗(yàn)提交工具,支持在命令行里動(dòng)態(tài)修改OmegaConf里面的數(shù)值。Hydra支持一個(gè)config里引用另一個(gè)config,于是你可以很容易的切換用db=mysql還是db=postgresql:

          ├── conf
          │   ├── config.yaml
          │   ├── db
          │   │   ├── mysql.yaml
          │   │   └── postgresql.yaml
          │   └── __init__.py
          └── my_app.py 

          而且,這個(gè)OmegaConf的配置(DictConfig類型)可以轉(zhuǎn)成Python的dict然后傳給wandb,打通全場(chǎng)(見第一節(jié)的示例代碼)。

          3. Plotly導(dǎo)出可交互的曲線

          Matplotlib不支持交互,生成的曲線無(wú)法還原每個(gè)點(diǎn)的值。Tensorboard和wandb的網(wǎng)頁(yè) 支持交互,但不容易導(dǎo)出,而且其內(nèi)置的precision-recall曲線等函數(shù)無(wú)法深度定制,只適合于畫一些loss和lr曲線。Plotly就很強(qiáng)了。

          鼠標(biāo)浮動(dòng),查看內(nèi)容

          當(dāng)然也可以做定制化的precision-recall曲線。比如我希望看不同threshold下的precision, recall和false positive ratio,這樣的定制化曲線wandb等并不支持,就可以用plotly

          df = DataFrame({
              'thres': thresholds,
              'prec': prec_data1,
              'recl': recl_data1,
              'fp': fp_data2
          })
          df = df.melt(id_vars=['thres'], value_vars=['prec''recl''fp'], var_name='curves')
          fig = px.line(df, x='thres', y='value', color='curves', markers=True)
          fig.update_xaxes(range=[0, 1])
          fig.update_yaxes(range=[0, 1])
          fig.update_traces(mode="markers+lines", hovertemplate=None)
          fig.update_layout(hovermode="x")
          fig.write_html(os.path.join(self.cfg.ckpt_dir, 'curves.html'), auto_play = False)

          里面的hovermode指定移動(dòng)鼠標(biāo)時(shí)顯示相同x值的不同y值:

          這還沒(méi)完,wandb支持把plotly生成的可交互網(wǎng)頁(yè)嵌入到wandb里

          import wandb
          import plotly.express as px

          # Initialize a new run
          run = wandb.init(project="log-plotly-fig-tables", name="plotly_html")

          # Create a table
          table = wandb.Table(columns = ["plotly_figure"])

          # Create path for Plotly figure
          path_to_plotly_html = "./plotly_figure.html"

          # Example Plotly figure
          fig = px.scatter(x = [0, 1, 2, 3, 4], y = [0, 1, 4, 9, 16])

          # Write Plotly figure to HTML
          fig.write_html(path_to_plotly_html, auto_play = False) # Setting auto_play to False prevents animated Plotly charts from playing in the table automatically

          # Add Plotly figure as HTML file into Table
          table.add_data(wandb.Html(path_to_plotly_html))

          # Log Table
          run.log({"test_table": table})
          wandb.finish()

          以上便完成了Hydra+OmegaConf+wandb+plotly的打通。

          4. 使用遠(yuǎn)程GPU服務(wù)器/集群的一些技巧

          如果要使用遠(yuǎn)程的服務(wù)器,常見問(wèn)題在于遠(yuǎn)程debug、代碼從本地同步到遠(yuǎn)程以及ssh斷線重連問(wèn)題。這些可以使用VS Code解決。

          1. 可以設(shè)置用得到的所有遠(yuǎn)程服務(wù)器,每個(gè)服務(wù)器配置好ssh,便于隨時(shí)登錄。下圖的REMOTE EXPLORER里除了SSH Targets還有Containers,即可以直接ssh到服務(wù)器的docker container里。container的運(yùn)行命令可以設(shè)置vs code自動(dòng)完成。
          1. 每個(gè)服務(wù)器都能從本地登錄的git賬戶里clone代碼。Clone之后下次可以直接遠(yuǎn)程打開這個(gè)repo
          1. 編輯Run and Debug設(shè)置(launch.json),可以預(yù)先設(shè)置training,testing等實(shí)驗(yàn)對(duì)應(yīng)的命令行參數(shù)和環(huán)境變量,以后點(diǎn)對(duì)應(yīng)的按鈕就直接運(yùn)行該實(shí)驗(yàn)。不用每次手動(dòng)復(fù)制參數(shù)
          1. 在repo里開一個(gè)文件夾,加入gitignore。每次做可視化圖片的時(shí)候,把圖片存到這個(gè)文件夾,即可通過(guò)vscode遠(yuǎn)程看圖,不需要每次ssh下載到本地。VS Code也支持內(nèi)建ipynb文件來(lái)一邊寫一邊運(yùn)行。


          點(diǎn)個(gè)在看 paper不斷!

          瀏覽 88
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  东方AV在线免费观看 | 在线中文字幕av 中文字幕久久精品 | 免费观看日批视频 | 少妇搡B午夜躁 | 国产真实露脸乱子伦对白高清视频 |