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

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

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

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

1、測(cè)試GPU程序源碼

首先我寫了一個(gè)簡(jiǎn)單的GPU測(cè)試程序

#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) {
    // 計(jì)算當(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() {
    // 定義向量長(zhǎng)度
    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; // 每個(gè)線程塊包含256個(gè)線程
    // 計(jì)算需要多少個(gè)線程塊才能覆蓋整個(gè)向量
    int blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock;
    // 在GPU上啟動(dòng)核函數(shù)(Kernel)
    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_a, d_b, d_c, n);
    // 等待GPU上所有線程計(jì)算完成
    cudaDeviceSynchronize();
    // 將計(jì)算結(jié)果從設(shè)備內(nèi)存復(fù)制回主機(jī)內(nèi)存
    cudaMemcpy(h_c, d_c, size, cudaMemcpyDeviceToHost);
    // (可選)驗(yàn)證前10個(gè)結(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;
        }
    }
    // 釋放所有申請(qǐng)的內(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ū)動(dòng)

先給出成功執(zhí)行命令,后面來(lái)一步步解釋關(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的時(shí)候需要的動(dòng)態(tài)庫(kù)目錄到容器中

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

2、路徑雖然共享進(jìn)去了,可能出現(xiàn)找不到動(dòng)態(tài)庫(kù)的情況,所以要把動(dòng)態(tài)庫(kù)添加到環(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、異常測(cè)試

3.1、驅(qū)動(dòng)異常

異常表現(xiàn):

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

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

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

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

如果出現(xiàn)下面結(jié)果,則說(shuō)明GPU動(dòng)態(tài)庫(kù)沒(méi)有問(wèn)題,GPU設(shè)備可能沒(méi)有掛載,導(dǎo)致計(jì)算結(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.

說(shuō)明設(shè)備中沒(méi)有corex設(shè)備

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    解決nacos啟動(dòng)時(shí)防火墻開(kāi)啟8848的坑

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

    Docker v1.13 新功能介紹

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

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

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

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

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

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

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

最新評(píng)論

防城港市| 嘉善县| 即墨市| 依安县| 平远县| 柳江县| 湟源县| 玛沁县| 奉节县| 若羌县| 德昌县| 棋牌| 曲靖市| 抚远县| 广东省| 弥勒县| 高碑店市| 天全县| 建水县| 磐石市| 临夏县| 武川县| 博兴县| 榆中县| 本溪市| 赤壁市| 开江县| 阿坝县| 许昌县| 顺平县| 黔南| 财经| 神木县| 肇庆市| 兴业县| 景洪市| 开化县| 巨鹿县| 景谷| 湘潭市| 隆昌县|