Alguém instalou CUDA 7.5 com sucesso no Ubuntu 14.04.3 LTS x86_64?

12

Minha estação de trabalho tem duas GPUs (Quadro K5200 e Quadro K2200) com o mais recente driver NVIDIA instalado (Versão: 352.41). Depois de baixar o arquivo cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb do CUDA 7.5 Downloads , eu tento instalá-lo, mas o resultado é o seguinte :

root@P700-Bruce:/home/bruce/Downloads# sudo apt-get install cuda
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 cuda : Depends: cuda-7-5 (= 7.5-18) but it is not going to be installed
 unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                        Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Eu tentei a solução:

  1. sudo apt-get remove nvidia-cuda-* # remove antigos pacotes nvidia-cuda
  2. Instalar dependências não atendidas:

    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-7-5 : Depends: cuda-toolkit-7-5 (= 7.5-18) but it is not going to be installed
                Depends: cuda-runtime-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
    root@P700-Bruce:/home/bruce/Downloads# apt-get install cuda-toolkit-7-5
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     cuda-toolkit-7-5 : Depends: cuda-core-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-command-line-tools-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-samples-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-documentation-7-5 (= 7.5-18) but it is not going to be installed
                        Depends: cuda-visual-tools-7-5 (= 7.5-18) but it is not going to be installed
     unity-control-center : Depends: libcheese-gtk23 (>= 3.4.0) but it is not going to be installed
                            Depends: libcheese7 (>= 3.0.1) but it is not going to be installed
    E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
    
  3. Instale e use o aptitude

Meu sistema operacional Ubuntu14.04 acabou de ser instalado e fez as atualizações de software e instalou o driver mais recente da Nvidia.

Você pode dar alguma ajuda? Agradecemos antecipadamente!

    
por Bruce Yo 09.09.2015 / 11:58

10 respostas

1

Eu reiniciei o Ubuntu hoje, e descobri que há outra dependência não atendida, algo como libcog15 : Depends: mesa-driver... (não me lembro do nome completo do pacote), então usei apt-get install para instalar o "mesa-driver". Depois disso, o CUDA 7.5 foi instalado com sucesso.

Note que minha versão do Kernel é 3.19.0-28-generic e a versão do gcc é Ubuntu 4.8.4-2ubuntu1 ~ 14.04 , que não é encontrada em < href="http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubunt-installation"> documentos oficiais CUDA 7.5 . Vou verificar se realmente funciona.

    
por Bruce Yo 10.09.2015 / 03:50
8

A instalação do CUDA é um pouco complicada. Eu segui os seguintes passos e isso funciona para mim. Você pode consultar este link também.

Confirmação do ambiente:

  1. lspci | grep -i nvidia (Confirme se as informações da placa da NVIDIA são exibidas)

  2. uname -m (certifique-se de que é um x86_64)

  3. gcc --version (verifique se ele está instalado)

Instalação do CUDA -

  1. Faça o download do arquivo cuda_7.5.18_linux.run do link

  2. Execute os seguintes comandos:

    sudo apt-get install build-essential
    echo blacklist nouveau option nouveau modeset=0 |sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf 
    sudo update-initramfs -u
    
  3. Reinicialize o computador

  4. Na tela de login, pressione Ctrl + Alt + F1 e entre no seu usuário.

  5. Vá para o diretório em que você tem o driver CUDA e execute

    chmod a+x .
    sudo service lightdm stop
    sudo bash cuda-7.5.18_linux.run --no-opengl-libs
    
  6. Durante a instalação:

    • Aceite as condições do EULA
    • Diga SIM para instalar o driver da NVIDIA
    • Diga SIM para instalar o CUDA Toolkit + Driver
    • Diga SIM para instalar amostras CUDA
    • Diga SEM reconstruir quaisquer configurações do Xserver com a Nvidia
  7. Verifique se existem arquivos /dev/nvidia* . Se não, faça o seguinte

    sudo modprobe nvidia
    
  8. Definir variáveis do caminho do ambiente

    export PATH=/usr/local/cuda-7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
    
  9. Verifique a versão do driver

    cat /proc/driver/nvidia/version'
    
  10. Verifique a versão do driver CUDA

    nvcc –V
    
  11. Ligue o lightdm novamente

    sudo service lightdm start
    
  12. Ctrl + Alt + F7 e login no sistema através da GUI

  13. Crie amostras CUDA, vá para a pasta NVIDIA_CUDA-7.5_Samples pelo terminal e execute o seguinte comando:

    make
    cd bin/x86_64/linux/release/
    ./deviceQuery
    ./bandwidthTest
    

    Ambos os testes devem produzir um 'PASS' no terminal

  14. Reinicialize o sistema

por Avik 19.02.2016 / 05:38
2

Existem duas maneiras de instalar o driver CUDA (para Optimus e outros chipsets gráficos embutidos em placas principais híbridas) - a primeira descrita aqui é a mais fácil e a segunda descrição é mais incômoda, mas eficaz também:

A)

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-355 nvidia-prime
sudo reboot

B)

A descrição do método B está aqui, mas já é mais antiga (explicada pelo usuário dschinn1001) - este método B é mais humblesome e pode ser arriscado, mas não prejudicial. :

Como posso instalar o driver Nvidia GT 520 e Cuda 5.0 no Ubuntu13.04?

O pacote beta-driver para a Nvidia para download para Linux está aqui:

link

O método A é mais simples, mas não claro, como ele interage com xscreensaver e o método B é mais antigo, mas o pacote do driver também é atualizado recentemente, e após o método B, ele deve funcionar melhor com xscreensaver condicionado esse xscreensaver está instalado. (Eu testei o método B no 13.10 e isso funcionava muito bem, mesmo com o xscreensaver. E acho que o resto deste tópico está no hardware.)

Além disso, e em referência ao zangão com Optimus-graphics-chipsets, estes ajustes para o bumblebee também são necessários:

Como configurar o nVidia Optimus / Bumblebee em 14.04

    
por dschinn1001 21.09.2015 / 21:19
1

Soa como bug lp 1428972 .

O usuário fennytansy adicionou uma solução alternativa em comentário # 10 :

sudo apt-get install libglew-dev libcheese7 libcheese-gtk23 libclutter-gst-2.0-0 libcogl15 libclutter-gtk-1.0-0 libclutter-1.0-0

    
por user3813819 10.09.2015 / 01:37
1

Instalei com sucesso o CUDA usando o método runfile. É um pouco mais difícil de configurar porque o seu driver gráfico primário também tem que ser instalado usando o método runfile ( Veja aqui ).

Tente instalar apenas o driver. Isso pode ser feito usando o método runfile. Ele solicitará a você cada parte da instalação e poderá desativar as bibliotecas e kits de ferramentas GL . O centro de controle da unidade tem me dado problemas também devido à necessidade da amostra CUDA de usar libGLU.so em vez de libGL.so . Essa é uma correção fácil ao criar seus próprios exemplos de aprendizado.

    
por asdf 15.09.2015 / 20:35
1

Tente desinstalar o driver nvidia e instalar diretamente o cuda sem ele. Em um novo Ubuntu 14.04, eu segui as instruções do site nvidia . Além de verificar versões compatíveis de coisas (gcc, kernel), as instruções foram:

sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb 
sudo apt-get update
sudo apt-get install cuda 

Felizmente, o driver nvidia correto foi instalado como subproduto das etapas acima.

    
por 661266 25.09.2015 / 01:46
1

Passei um dia inteiro procurando usar " ppa: graphics-drivers / ppa " para atualizar a NVIDIA drivers para a versão 352. Tudo falhou. Após uma instalação, o gpu-manager.log relatou que os drivers foram instalados enquanto o Xorg.0.log reportaria o contrário.

O driver nouveau foi removido e colocado na lista negra:      sudo apt-get --purge remover xserver-xorg-video-nouveau      cat /etc/modprobe.d/nouveau-nomodeset-jsrobin.conf         lista negra nouveau         opções nouveau modeset = 0         alias nouveau off         alias lbm-nouveau off

Eu finalmente desisti e usei uma solução puramente "NVIDIA ... bin".

  1. Nouveau na lista negra, como mostrado acima.
  2. desinstalou completamente o nouveau Xserver como citado acima.
  3. Defina o BIOS do sistema para que o PCIe (as duas placas NVIDIA) seja o principal e desative a interface HD4600 da placa principal.
  4. inicializou no modo de recuperação, ativou a rede e foi para o modo de console.
  5. Executei "NVIDIA-Linux-x86_64-352.41.run -uninstall" apenas para garantir que nada restasse.
  6. Excluiu todos os diretórios antigos em / etc, / usr / local, que pareciam um remanescente das instalações anteriores da cuda ou nvidia.
  7. Ran "NVIDIA-Linux-x86_64-352.41.run"
  8. Executei "NVIDIA-Linux-x86_64-352.41.run --check" para verificar se tudo estava correto (era).
  9. Em seguida, executei "cuda_7.5.18_linux.run" para concluir a instalação. As coisas estão funcionando atualmente. Ambos os monitores estão ativos e funcionando. Atualmente trabalhando na construção dos arquivos de amostra do cuda. Certifique-se de usar os sinalizadores "--help" nos compartimentos de instalação da NVIDIA. A principal razão pela qual decidi ir a rota bin (juntamente com uma das alternativas que não funcionam, é que a abordagem "bin" fornece uma rota fácil para a recuperação após uma atualização OpenGL "mesa".
por user225932 18.09.2015 / 19:05
0

Por favor, consulte: link . Está relacionado com a instalação do Caffe em essência, mas também aborda a instalação do CUDA.

    
por amirsina torfi 27.10.2016 / 08:53
-1

Eu tentei sudo su e apt-get install cuda em vez de sudo apt-get install cuda. Funcionou.

 sudo dpkg -i cuda-repo-ubuntu1404_7.5-18_amd64.deb
 sudo apt-get update
 sudo su
 apt-get install cuda
    
por softgearko 05.02.2016 / 03:54
-1

-problemas com log do lightdm (loop de login)

-problemas com driver istall ("Instalação do driver falhou: parece que um servidor X está rodando ...")

Para instalar com êxito o NVidia CUDA Toolkit no Ubuntu 16.04 64bit, eu só tive que fazer:

  1. crie uma imagem ao vivo do Ubuntu no pendrive (a caneta de 8GB é suficiente) - tal tentativa irá poupar uma tonelada de nervos , antes de não ter sucesso instalar no seu sistema Linux host !!!
  2. faça o login na sessão ao vivo no pendrive ("Experimente o Ubuntu, antes de instalar" )
  3. adicione o usuário sudo na sessão ao vivo:

    sudo adduser admin (#pass: admin1)

    sudo usermod -aG sudo admin

  4. saia da sessão ao vivo, faça login como #admin

  5. faça o download do CUDA Toolkit do site oficial da NVidia (~ 1.5GB)
  6. altere privilégios para o arquivo baixado do instalador (NÃO INSTALAR NESTE PASSO! ):
    sudo chmod + x cuda_X.X.run

  7. mudar para a vista da consola:

    Ctr + Alt + F1 (para ativar a visualização do terminal) Ctr + Alt + F7 (para alternar da visualização do terminal para o servidor gráfico)

  8. na visualização do console (Ctr + Alt + F1) faça o login:

    login: admin pass: admin1

  9. pare o serviço de execução gráfica:

    serviço sudo lightdm stop

  10. verifique se o servidor gráfico está desligado - depois de alternar Ctr + Alt + F7  o monitor deve ficar em branco em preto, voltar na exibição do console  Ctr + Alt + F1

  11. instale o CUDA Toolkit, com essa configuração:

    sudo ./cuda_X.X.run (pressione 'q' para leitura de licença) não instale a biblioteca OpenGL não atualiza a configuração do sistema X outras opções fazem sim e caminhos como padrão

  12. ligue o servidor gráfico:

    serviço sudo lightdm start

  13. faça login como usuário (se você fizer login automaticamente como #ubuntu ao vivo  sessão sair):

    login: admin pass: admin1

  14. verifique se o compilador nvcc funciona com o simples fornecido  soma vetorial paralela em blocos de GPU:

    salve vecSum.cu e book.h em novos arquivos, compile e execute no terminal: /usr/local/cuda-8.0/bin/nvcc vecSum.cu & & clear & & ./a.out

  15. verifique a impressão do console - deve ser semelhante a: 0,000000 + 0,000000 = 0,000000

    -1.100000 + 0.630000 = -0.000000
    
    -2.200000 + 2.520000 = 0.319985
    
    -3.300000 + 5.670000 = 2.119756
    -4.400000 + 10.080000 = 5.679756
    -5.500000 + 15.750000 = 10.250000
    -6.600000 + 22.680000 = 16.017500
    -7.700000 + 30.870001 = 23.170002
    -8.800000 + 40.320000 = 31.519997
    -9.900000 + 51.029999 = 41.129967
    
  16. se tudo correu bem na sessão ao vivo pendrive, faça o mesmo no seu sistema linux host

P.S. Por favor, note que não é tutorial ideal, mas funciona bem para mim!

======= vecSum.cu =====

#include "book.h"
#define N 50000
///usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear && ./a.out

//"HOST" = CPU
//"Device" = GPU

__global__ void add( float *a, float *b, float *c )
{
    int tid = blockIdx.x;
    if ( tid < N )
        c[ tid ] = a[ tid ] + b[ tid ];
}

int main ( void )
{
    float a[ N ], b[ N ], c[ N ];
    float *dev_a, *dev_b, *dev_c;
    //GPU memory allocation
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_a, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_b, N * sizeof( float ) ) );
    HANDLE_ERROR( cudaMalloc( ( void** )&dev_c, N * sizeof( float ) ) );

    //sample input vectors CPU generation
    for ( int i = 0; i < N; i++ )
    {
        a[ i ] = -i * 1.1;
        b[ i ] = i * i * 0.63;
    }

    //copy/load from CPU to GPU data vectors a[], b[] HostToDevice
    HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof( float ), cudaMemcpyHostToDevice ) );
    HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof( float ), cudaMemcpyHostToDevice ) );

    //calculate sum of vectors on GPU
    add<<<N,1>>> ( dev_a, dev_b, dev_c );

    //copy/load result vector from GPU to CPU c[] DeviceToHost
    HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof( float ), cudaMemcpyDeviceToHost ) );

    //printout results
    for ( int i = 0; i < 10; i++ ) printf( "%f + %f = %f\n", a[ i ], b[ i ], c[ i ] );

    //free memory and constructed objects on GPU
    cudaFree( dev_a );
    cudaFree( dev_b );
    cudaFree( dev_c );

    return 0;
}

========= book.h ======

/*
 * Copyright 1993-2010 NVIDIA Corporation.  All rights reserved.
 *
 * NVIDIA Corporation and its licensors retain all intellectual property and
 * proprietary rights in and to this software and related documentation.
 * Any use, reproduction, disclosure, or distribution of this software
 * and related documentation without an express license agreement from
 * NVIDIA Corporation is strictly prohibited.
 *
 * Please refer to the applicable NVIDIA end user license agreement (EULA)
 * associated with this source code for terms and conditions that govern
 * your use of this NVIDIA software.
 *
 */


#ifndef __BOOK_H__
#define __BOOK_H__
#include <stdio.h>

static void HandleError( cudaError_t err,
                         const char *file,
                         int line ) {
    if (err != cudaSuccess) {
        printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
                file, line );
        exit( EXIT_FAILURE );
    }
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))


#define HANDLE_NULL( a ) {if (a == NULL) { \
                            printf( "Host memory failed in %s at line %d\n", \
                                    __FILE__, __LINE__ ); \
                            exit( EXIT_FAILURE );}}

template< typename T >
void swap( T& a, T& b ) {
    T t = a;
    a = b;
    b = t;
}


void* big_random_block( int size ) {
    unsigned char *data = (unsigned char*)malloc( size );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}

int* big_random_block_int( int size ) {
    int *data = (int*)malloc( size * sizeof(int) );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}


// a place for common kernels - starts here

__device__ unsigned char value( float n1, float n2, int hue ) {
    if (hue > 360)      hue -= 360;
    else if (hue < 0)   hue += 360;

    if (hue < 60)
        return (unsigned char)(255 * (n1 + (n2-n1)*hue/60));
    if (hue < 180)
        return (unsigned char)(255 * n2);
    if (hue < 240)
        return (unsigned char)(255 * (n1 + (n2-n1)*(240-hue)/60));
    return (unsigned char)(255 * n1);
}

__global__ void float_to_color( unsigned char *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset*4 + 0] = value( m1, m2, h+120 );
    optr[offset*4 + 1] = value( m1, m2, h );
    optr[offset*4 + 2] = value( m1, m2, h -120 );
    optr[offset*4 + 3] = 255;
}

__global__ void float_to_color( uchar4 *optr,
                              const float *outSrc ) {
    // map from threadIdx/BlockIdx to pixel position
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int offset = x + y * blockDim.x * gridDim.x;

    float l = outSrc[offset];
    float s = 1;
    int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
    float m1, m2;

    if (l <= 0.5f)
        m2 = l * (1 + s);
    else
        m2 = l + s - l * s;
    m1 = 2 * l - m2;

    optr[offset].x = value( m1, m2, h+120 );
    optr[offset].y = value( m1, m2, h );
    optr[offset].z = value( m1, m2, h -120 );
    optr[offset].w = 255;
}


#if _WIN32
    //Windows threads.
    #include <windows.h>

    typedef HANDLE CUTThread;
    typedef unsigned (WINAPI *CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC unsigned WINAPI
    #define  CUT_THREADEND return 0

#else
    //POSIX threads.
    #include <pthread.h>

    typedef pthread_t CUTThread;
    typedef void *(*CUT_THREADROUTINE)(void *);

    #define CUT_THREADPROC void
    #define  CUT_THREADEND
#endif

//Create thread.
CUTThread start_thread( CUT_THREADROUTINE, void *data );

//Wait for thread to finish.
void end_thread( CUTThread thread );

//Destroy thread.
void destroy_thread( CUTThread thread );

//Wait for multiple threads.
void wait_for_threads( const CUTThread *threads, int num );

#if _WIN32
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void *data){
        return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, data, 0, NULL);
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        WaitForSingleObject(thread, INFINITE);
        CloseHandle(thread);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        TerminateThread(thread, 0);
        CloseHandle(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        WaitForMultipleObjects(num, threads, true, INFINITE);

        for(int i = 0; i < num; i++)
            CloseHandle(threads[i]);
    }

#else
    //Create thread
    CUTThread start_thread(CUT_THREADROUTINE func, void * data){
        pthread_t thread;
        pthread_create(&thread, NULL, func, data);
        return thread;
    }

    //Wait for thread to finish
    void end_thread(CUTThread thread){
        pthread_join(thread, NULL);
    }

    //Destroy thread
    void destroy_thread( CUTThread thread ){
        pthread_cancel(thread);
    }

    //Wait for multiple threads
    void wait_for_threads(const CUTThread * threads, int num){
        for(int i = 0; i < num; i++)
            end_thread( threads[i] );
    }

#endif




#endif  // __BOOK_H__
    
por Piotr Lenarczyk 18.10.2016 / 11:15