Ubuntu Linux 12.10 使用 apt 安裝 NVIDIA CUDA

圖片來源:Stanford EdTech
這裡介紹如何在 Ubuntu Linux 12.10 中安裝 NVIDIA CUDA,以往的 Ubuntu Linux 在安裝 CUDA 時都是要自行上 NVIDIA 的網站抓取安裝檔安裝,但是現在 Ubuntu Linux 已經將 NVIDIA CUDA 納入 apt 之中,所以安裝起來更為方便。

首先安裝 NVIDIA 的驅動程式(driver),一般如果想安裝最新版的驅動程式,就要自己連上 NVIDIA 的官方網站下載最新的安裝檔,自己安裝,但若是沒有特別需求,可以直接用 Ubuntu 中的 apt 來裝比較快。



首先更新一下 apt:
sudo apt-get update

接著安裝 NVIDIA driver:
sudo apt-get install linux-source linux-headers-generic nvidia-current-updates

再裝個 mesa-utils 等一下測試用:
sudo apt-get install mesa-utils

安裝完 NVIDIA driver 後,記得要重新啟動電腦,讓新的驅動程式生效。

接著看看驅動程式有沒有正常,用 glxinfo 這個指令查一查:
glxinfo

他會輸出 GLX 相關的資訊,不過我們有興趣的只是他有沒有正確抓到 NVIDIA 的顯示卡,只要看 OpenGL vendor、renderer 與 version 就可以了,正常的話,大約會像這樣:

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro FX 3700/PCIe/SSE2
OpenGL version string: 3.3.0 NVIDIA 304.51

這裡顯示他已經抓到 NVIDIA Quadro FX 3700 這張卡,而 NVIDIA driver 的版本是 304.51,這樣就沒問題了。

接著安裝 NVIDIA CUDA,一樣可以直接使用 apt 來裝:
apt-get install nvidia-cuda-dev nvidia-cuda-toolkit

這裡如果是一個新灌好的 Ubuntu Linux,通常會下載好幾百 MB 的套件,像是編譯器等等,因為 Ubuntu 在安裝時都沒有安這些東西,所以要等一會兒。

安裝完成後,基本上 CUDA 就可以使用了,不過 apt 的套件裡面好像沒有看到範例程式,若是要範例程式可能就要上 NVIDIA 檔網站下載了。

另外,透過 apt 安裝的 CUDA 通常都不是最新版的,因為 NVIDIA CUDA 更新太快,社群通常沒辦法馬上就跟上,版本可用 nvcc 來檢查:
nvcc -V

輸出為:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2012 NVIDIA Corporation
Built on Thu_Apr__5_00:24:31_PDT_2012
Cuda compilation tools, release 4.2, V0.2.1221

這次我們裝的版本是 4.2 的,並不是最新版,如果要最新版的 CUDA,當然還是要上 NVIDIA 的網站下載,再自行安裝。
本站已經搬家了,欲查看最新的文章,請至 G. T. Wang 新網站

15 則留言:

  1. 您好~ 想請問一下我在Cuda安裝遇到的問題

    我目前是用
    OS :Ubuntu LST version
    GPU:Nvidia quadro 2000

    我用apt-get 的方法安裝,然後執行glxinfo
    name of display: localhost:10.0
    Xlib: extension "NV-GLX" missing on display "localhost:10.0".
    display: localhost:10 screen: 0
    direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
    server glx vendor string: SGI
    server glx version string: 1.2
    server glx extensions:
    GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_EXT_import_context, GLX_OML_swap_method, GLX_SGI_make_current_read,
    GLX_SGIS_multisample, GLX_SGIX_hyperpipe, GLX_SGIX_swap_barrier,
    GLX_SGIX_fbconfig
    client glx vendor string: NVIDIA Corporation
    client glx version string: 1.4
    client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
    GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
    GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_EXT_swap_control_tear,
    GLX_EXT_buffer_age, GLX_ARB_create_context,
    GLX_ARB_create_context_profile, GLX_NV_float_buffer,
    GLX_ARB_fbconfig_float, GLX_EXT_fbconfig_packed_float,
    GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB,
    GLX_NV_present_video, GLX_NV_copy_image, GLX_NV_multisample_coverage,
    GLX_NV_video_capture, GLX_EXT_create_context_es_profile,
    GLX_EXT_create_context_es2_profile, GLX_ARB_create_context_robustness
    GLX version: 1.2
    GLX extensions:
    GLX_ARB_multisample, GLX_EXT_visual_info, GLX_EXT_visual_rating,
    GLX_EXT_import_context, GLX_SGIX_fbconfig, GLX_ARB_get_proc_address
    OpenGL vendor string: ATI Technologies Inc.
    OpenGL renderer string: ATI Radeon HD 5400 Series
    OpenGL version string: 1.2 (4.0.10243 Compatibility Profile Context)
    OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multitexture,
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow,
    GL_ARB_texture_border_clamp, GL_ARB_texture_cube_map,
    GL_ARB_texture_env_add, GL_ARB_texture_env_combine,
    GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
    GL_ARB_texture_mirrored_repeat, GL_ARB_transpose_matrix,
    GL_ARB_window_pos, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
    GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays,
    GL_EXT_packed_pixels, GL_EXT_rescale_normal, GL_EXT_secondary_color,
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs, GL_EXT_stencil_wrap,
    GL_EXT_texture3D, GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, GL_EXT_texture_lod,
    GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_vertex_array,
    GL_ATI_texture_mirror_once, GL_IBM_texture_mirrored_repeat,
    GL_NV_blend_square, GL_NV_texgen_reflection, GL_SGIS_generate_mipmap,
    GL_SGIS_texture_lod


    明顯地出了問題OpenGL 的render顯示為
    原本主機的內建顯卡,而不是外接的這張卡,
    然後之後執行cuda 的device query 都會顯示找不到nvidia 的卡,想請問一下怎麼處理

    回覆刪除
  2. To Cheng-Yang Fu:

    顯示卡有插好嗎?
    lspci 的輸出為何?

    回覆刪除
  3. 顯卡應該是有插好QQ
    lspci |grep VGA


    01:00.1 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200EH
    07:00.0 VGA compatible controller: NVIDIA Corporation GF106GL [Quadro 2000] (rev a1)

    有顯示Quadro 2000這張卡

    回覆刪除
  4. To Cheng-Yang Fu:

    ls /dev|grep nvidia 的輸出為何?

    回覆刪除
  5. ls /dev|grep nvidia
    執行後是空白的,我這點覺得很奇怪,但是不知道怎麼解決

    回覆刪除
  6. To Cheng-Yang Fu:

    按照這裡的方式建立 /dev 下面的檔案看看:
    http://sealmemory.blogspot.tw/2012/01/x-window-cuda.html

    回覆刪除
  7. 感謝~~~ 目前可以執行
    因為之前我嘗試灌bumblebee來解決這個問題,但是bumblebee會black掉/sbin/modprobe載入的nvidia,所以失敗,把bumblebee移除重新執行提供的script就可以了

    這台機器我目前是當作server來使用,執行sdk裡面運算的部分都可以,但是牽扯到繪圖不能執行,可以請問一下如果解決這步驟是要如何?
    顯示的錯誤訊息
    freeglut (./simpleTexture3D): ERROR: Internal error in function fgOpenWindow
    X Error of failed request: BadWindow (invalid Window parameter)
    Major opcode of failed request: 4 (X_DestroyWindow)
    Resource id in failed request: 0x0
    Serial number of failed request: 20
    Current serial number in output stream: 23

    回覆刪除
  8. To Cheng-Yang Fu:

    您是用 SSH 遠端執行這隻程式嗎?
    還是直接在這台 Server 本機執行?

    回覆刪除
  9. 我用ssh 或是遠端桌面回去兩種都有,遠端桌面會去的error有些不同
    Serial number of failed request: 24
    Current serial number in output stream: 27
    最下面兩條訊息不同,其他錯誤訊息同ssh

    回覆刪除
  10. To Cheng-Yang Fu:

    SSH 連線時是否有使用 -X 或 -Y 參數?
    Client 端電腦顯示卡是否有支援 OpenGL?

    回覆刪除
  11. 這個我不確定
    我是在windows下用putty+Xming 執行需要gui的程式,基本上連回ubuntu執行都沒問題

    回覆刪除
  12. To Cheng-Yang Fu:

    那執行 glxgears 是否正常?

    回覆刪除
  13. 可以
    15405 frames in 5.0 seconds = 3073.774 FPS

    這個fps代表有使用到nvidia 的顯卡嗎?

    回覆刪除
  14. To Cheng-Yang Fu:

    這個指令會使用 Client 的顯示卡,
    這樣看起來 Client 的 3D 應該是正常的。

    問題可能是出現在 Server 上,
    像是 library 與 kernel module 版本等等,
    把錯誤訊息貼到 Google 查查看吧。

    回覆刪除