最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker鏡像配置掛載GPU的實現(xiàn)步驟

 更新時間:2026年04月14日 08:11:09   作者:鴻儒517  
本文記錄了在普通Docker容器中成功掛載本地GPU設(shè)備并運(yùn)行GPU程序的完整過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我在普通docker中掛載本地GPU設(shè)備,然后成功測試運(yùn)行GPU程序,特此記錄

1、測試GPU程序源碼

首先我寫了一個簡單的GPU測試程序

#include <iostream>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
// CUDA 核函數(shù)(Kernel):運(yùn)行在GPU上
__global__ void vectorAdd(const float *a, const float *b, float *c, int n) {
    // 計算當(dāng)前線程的全局索引
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    // 確保索引在數(shù)組范圍內(nèi),然后執(zhí)行加法
    if (idx < n) {
        c[idx] = a[idx] + b[idx];
    }
}
int main() {
    // 定義向量長度
    const int n = 10000;
    const size_t size = n * sizeof(float);
    // 在主機(jī)(CPU)上分配并初始化內(nèi)存
    float *h_a = new float[n];
    float *h_b = new float[n];
    float *h_c = new float[n];
    for (int i = 0; i < n; i++) {
        h_a[i] = static_cast<float>(i);       // 例如: 0.0, 1.0, 2.0...
        h_b[i] = static_cast<float>(i * 2);   // 例如: 0.0, 2.0, 4.0...
    }
    // 在設(shè)備(GPU)上分配內(nèi)存
    float *d_a = nullptr;
    float *d_b = nullptr;
    float *d_c = nullptr;
    cudaMalloc(&d_a, size);
    cudaMalloc(&d_b, size);
    cudaMalloc(&d_c, size);
    // 將數(shù)據(jù)從主機(jī)內(nèi)存復(fù)制到設(shè)備內(nèi)存
    cudaMemcpy(d_a, h_a, size, cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, h_b, size, cudaMemcpyHostToDevice);
    // 設(shè)置GPU線程的組織結(jié)構(gòu)
    int threadsPerBlock = 256; // 每個線程塊包含256個線程
    // 計算需要多少個線程塊才能覆蓋整個向量
    int blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock;
    // 在GPU上啟動核函數(shù)(Kernel)
    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_a, d_b, d_c, n);
    // 等待GPU上所有線程計算完成
    cudaDeviceSynchronize();
    // 將計算結(jié)果從設(shè)備內(nèi)存復(fù)制回主機(jī)內(nèi)存
    cudaMemcpy(h_c, d_c, size, cudaMemcpyDeviceToHost);
    // (可選)驗證前10個結(jié)果是否正確
    std::cout << "Checking the first 10 results..." << std::endl;
    std::cout << "t" << "CPU" << "tt" << "GPU" << std::endl;
    for (int i = 0; i < 10; i++) {
        float expected = h_a[i] + h_b[i];
        if (std::abs(h_c[i] - expected) > 1e-5) {
            std::cout << "Error at index " << i << ": " << h_c[i] << " != " << expected << std::endl;
        } else {
            std::cout << "t" << expected << "tt" << h_c[i] << " [PASS]" << std::endl;
        }
    }
    // 釋放所有申請的內(nèi)存
    delete[] h_a;
    delete[] h_b;
    delete[] h_c;
    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_c);
    std::cout << "Vector addition completed successfully!" << std::endl;
    return 0;
}

如果在帶GPU的電腦上正常編譯運(yùn)行,結(jié)果應(yīng)該如下

./GPUTest_exe 
Checking the first 10 results...
tCPUttGPU
t0tt0 [PASS]
t3tt3 [PASS]
t6tt6 [PASS]
t9tt9 [PASS]
t12tt12 [PASS]
t15tt15 [PASS]
t18tt18 [PASS]
t21tt21 [PASS]
t24tt24 [PASS]
t27tt27 [PASS]
Vector addition completed successfully!

2、docker中配置GPU設(shè)備及驅(qū)動

先給出成功執(zhí)行命令,后面來一步步解釋關(guān)鍵共享GPU代碼

docker run --memory=10g --memory-swap=10g --rm \
-v /Bin_Release:/JX \
-v /usr/local/corex:/usr/local/corex \
-v /usr/local/cuda-10.2:/usr/local/cuda-10.2 \
-v /usr/lib64:/usr/lib64 \
-e LD_LIBRARY_PATH=/usr/local/corex/lib64:/usr/local/cuda-10.2/lib64 \
--device=/dev/iluvatar0 \
--privileged \
-w /docker_test:v1.0 \
./GPU_Bin/GPUTest_exe

1、用-v 共享編譯GPU的時候需要的動態(tài)庫目錄到容器中

-v /usr/local/corex:/usr/local/corex 
-v /usr/local/cuda-10.2:/usr/local/cuda-10.2 

2、路徑雖然共享進(jìn)去了,可能出現(xiàn)找不到動態(tài)庫的情況,所以要把動態(tài)庫添加到環(huán)境變量中

-e LD_LIBRARY_PATH=/usr/local/corex/lib64:/usr/local/cuda-10.2/lib64 \

3、添加GPU 設(shè)備

--device=/dev/iluvatar0
#有些設(shè)備是corex ,則需要配置
--device=/dev/corex

4、加了 --privileged,給 GPU 完整權(quán)限

3、異常測試

3.1、驅(qū)動異常

異常表現(xiàn):

error while loading shared libraries: libcudart.so.10.2: cannot open shared object file

解決方案:
將動態(tài)庫設(shè)置到環(huán)境變量中即可

-e LD_LIBRARY_PATH=/usr/local/corex/lib64:/usr/local/cuda-10.2/lib64

3.2、計算結(jié)果異常

如果出現(xiàn)下面結(jié)果,則說明GPU動態(tài)庫沒有問題,GPU設(shè)備可能沒有掛載,導(dǎo)致計算結(jié)果都是0的異常值

異常表現(xiàn):

./GPU_Bin/GPUTest_exe
Checking the first 10 results...
tCPUttGPU
t0tt0 [PASS]
Error at index 1: 0 != 3
Error at index 2: 0 != 6
Error at index 3: 0 != 9
Error at index 4: 0 != 12
Error at index 5: 0 != 15
Error at index 6: 0 != 18
Error at index 7: 0 != 21
Error at index 8: 0 != 24
Error at index 9: 0 != 27
Vector addition completed successfully!

解決方案:

--device=/dev/corex

3.3、設(shè)備異常

異常表現(xiàn)

./GPU_Bin/GPUTest_exedocker: Error response from daemon: error gathering device information while adding custom device "/dev/corex": no such file or directory.

說明設(shè)備中沒有corex設(shè)備

解決方案:
這時候要找到真正的GPU設(shè)備,然后掛載進(jìn)去,可以將/dev文件夾設(shè)備都復(fù)制出來,讓豆包幫你找到真正的GPU設(shè)備

到此這篇關(guān)于docker鏡像配置掛載GPU的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)docker配置掛載GPU內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 部署Docker Registry并配置認(rèn)證登錄教程

    部署Docker Registry并配置認(rèn)證登錄教程

    DockerRegistry是一個用于存儲和分發(fā)Docker鏡像的無狀態(tài)、高度可擴(kuò)展的服務(wù)器側(cè)應(yīng)用程序,在內(nèi)網(wǎng)環(huán)境下,可以使用DockerRegistry來解決k8s集群的鏡像拉取問題,如果需要開啟認(rèn)證功能,可以直接看配置DockerRegistry認(rèn)證搭建
    2025-12-12
  • Docker實現(xiàn)導(dǎo)入導(dǎo)出鏡像(Image)文件的代碼示例

    Docker實現(xiàn)導(dǎo)入導(dǎo)出鏡像(Image)文件的代碼示例

    在 Docker 中,鏡像(Image)是容器的基礎(chǔ),包含了應(yīng)用程序運(yùn)行所需的所有文件系統(tǒng)和配置,有時,我們需要將 Docker 鏡像導(dǎo)出到文件中,以便在其他地方使用,以下將詳細(xì)介紹如何使用 Docker 導(dǎo)入導(dǎo)出鏡像文件,需要的朋友可以參考下
    2024-08-08
  • docker swarm集群搭建過程對比k8s區(qū)別解析

    docker swarm集群搭建過程對比k8s區(qū)別解析

    Docker Swarm和Kubernetes是兩種流行的容器編排工具,它們在服務(wù)部署、高可用性、滾動更新、資源管理和存儲編排方面有所不同,本文給大家介紹docker swarm集群搭建過程對比k8s區(qū)別解析,感興趣的朋友一起看看吧
    2025-11-11
  • docker運(yùn)行項目的方法

    docker運(yùn)行項目的方法

    在本篇文章里小編給大家分享的是關(guān)于docker運(yùn)行項目的方法和實例,需要的朋友們學(xué)習(xí)參考下。
    2020-03-03
  • docker引起服務(wù)器磁盤爆滿的問題解決

    docker引起服務(wù)器磁盤爆滿的問題解決

    本文主要介紹了docker引起服務(wù)器磁盤爆滿的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 解決nacos啟動時防火墻開啟8848的坑

    解決nacos啟動時防火墻開啟8848的坑

    最近操作Nacos時遭遇8848端口無法訪問的問題,嘗試通過安全組和firewall配置仍無法解決,最終發(fā)現(xiàn),firewall對Docker使用專門的作用域,需要在相應(yīng)作用域下開放端口,務(wù)必檢查firewall中針對Docker的設(shè)置,確保8848端口在正確的作用域內(nèi)被允許通行
    2022-10-10
  • Docker v1.13 新功能介紹

    Docker v1.13 新功能介紹

    本篇文章主要介紹了Docker v1.13 新功能介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Docker部署Gitea服務(wù)的實現(xiàn)

    Docker部署Gitea服務(wù)的實現(xiàn)

    本文主要介紹了Docker部署Gitea服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • docker添加網(wǎng)橋并設(shè)置ip地址范圍操作

    docker添加網(wǎng)橋并設(shè)置ip地址范圍操作

    這篇文章主要介紹了docker添加網(wǎng)橋并設(shè)置ip地址范圍操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker容器/etc/hosts文件修改方法

    docker容器/etc/hosts文件修改方法

    在容器內(nèi)部,當(dāng)需要訪問其他容器或主機(jī)時,可以通過/etc/hosts文件來解析主機(jī)名,從而實現(xiàn)網(wǎng)絡(luò)通信,這篇文章主要介紹了docker容器/etc/hosts文件,需要的朋友可以參考下
    2023-06-06

最新評論

大悟县| 饶平县| 新营市| 冕宁县| 黔东| 赤壁市| 宁武县| 西宁市| 凤台县| 浏阳市| 马龙县| 晋宁县| 平利县| 阿瓦提县| 渝中区| 伊通| 清流县| 蓬莱市| 桦南县| 南皮县| 永吉县| 阳高县| 四子王旗| 定西市| 乌鲁木齐市| 滨州市| 湄潭县| 河池市| 安岳县| 淮滨县| 许昌县| 建始县| 大安市| 嵩明县| 林甸县| 木里| 融水| 庄浪县| 怀远县| 神农架林区| 北川|