1. 程式人生 > >docker tvm :AttributeError: module 'tvm' has no attribute 'testing'

docker tvm :AttributeError: module 'tvm' has no attribute 'testing'

最近在搞tvm [官網:https://tvm.ai/], 我採用的docker的方式來快速入手的, 總體來說很簡單:

1. 獲取docker映象

sudo docker pull tvmai/demo-gpu

2. 執行docker映象, 注意這裡我們使用了GPU, 需要用到nvidia-docker來共享gpu裝置, 由於要使用到jupyter notebook, 所以要埠, 預設的是8888, 可以自行配置, 最後就是共享了一個工作目錄. 命令如下:

sudo nvidia-docker run -it -p 8888:8888 tvmai/demo-gpu -v /tvm_source:/source  --name tvmai_gpu /bin/bash

3. 執行jupyter notebook , 由於是root使用者, 要加一個 --allow-root 引數

jupyter notebook --allow-root

道理就是這樣, 但是好像有坑, 具體錯誤沒有記錄, 好像是socket.error bind端口出錯了, 這個時候是因為沒有notebook的配置.

4. 配置下jupyter notebook [參考的FQ_G的部落格]

jupyter notebook --generate-config
vim ~/.jupyter/jupyter_notebook_config.py

找到下面引數, 做些修改:

c.NotebookApp.ip = '0.0.0.0' #所有的網路都可以
    # 如果你希望本機訪問,可以配置為 127.0.0.1, 
    # 我試著配置了localhost, 發現不得行, 不曉得是hosts檔案沒有配置還是啥的, 供參考
c.NotebookApp.port = 8888   #這裡可以配置執行的埠

配置了過後, 就jupyter notebook執行就沒得毛病了

5. 另外一個坑, 跟著教程走, 遇到

AttributeError: module 'tvm' has no attribute 'testing'

這個錯誤網上沒有找到,於是只有看原始碼了, 其實有個testing.py 很簡單, 程式碼如下:

""" TVM testing utilities """
import numpy as np

def assert_allclose(actual, desired, rtol=1e-7, atol=1e-7):
    """ Version of np.testing.assert_allclose with `atol` and `rtol` fields set
    in reasonable defaults.

    Arguments `actual` and `desired` are not interchangable, since the function
    compares the `abs(actual-desired)` with `atol+rtol*abs(desired)`.  Since we
    often allow `desired` to be close to zero, we generally want non-zero `atol`.
    """
    np.testing.assert_allclose(actual, desired, rtol=rtol, atol=atol, verbose=True)

所以, 遇到這個錯誤, 你就可以直接把 tvm.testing 轉換為 np.testing 即可, 如:

tvm.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())

轉換為:

np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy(), rtol=1e-7, atol=1e-7, verbose=True)

恩恩, 估計還會遇到不少問題, 繼續慢慢看了, 有小夥伴在研究的, 可以組團 [w.w]