Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

win10 compile yolov8 happen:yololayer.cu(262): error : expression must have a constant value #1520

Open
cronousbaby opened this issue May 10, 2024 · 12 comments

Comments

@cronousbaby
Copy link

在win10下编译 tensorrtx-yolov8 出现如下错误:
【1】、
2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): error : expression must have a constant value
2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): note #2689-D: the value of variable "maxGrids"
2>(261): here cannot be used as a constant
【2】、
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\CUDA 11.7.targets(790,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe" --use-local-env -ccbin "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64" -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -IJ:\tensorrtx\yolov8\include -I"I:\TensorRT-8.6.1.6\include" -I"I:\TensorRT-8.6.1.6\samples\common" -IJ:\tensorrtx\yolov8\plugin -II:\opencv\build\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" --keep-dir myplugins\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -std=c++11 -Xcompiler="/EHsc -Ob2" -D_WINDOWS -DNDEBUG -DAPI_EXPORTS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -D_WINDLL -D_MBCS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdmyplugins.dir\Release\vc143.pdb /FS /MD /GR" -o myplugins.dir\Release\yololayer.obj "J:\tensorrtx\yolov8\plugin\yololayer.cu"”已退出,返回代码为 1。

@wang-xinyu
Copy link
Owner

@lindsayshuo Pls advice.

@lindsayshuo
Copy link
Contributor

在win10下编译 tensorrtx-yolov8 出现如下错误: 【1】、 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): error : expression must have a constant value 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): note #2689-D: the value of variable "maxGrids" 2>(261): here cannot be used as a constant 【2】、 C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\CUDA 11.7.targets(790,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe" --use-local-env -ccbin "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64" -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -IJ:\tensorrtx\yolov8\include -I"I:\TensorRT-8.6.1.6\include" -I"I:\TensorRT-8.6.1.6\samples\common" -IJ:\tensorrtx\yolov8\plugin -II:\opencv\build\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" --keep-dir myplugins\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -std=c++11 -Xcompiler="/EHsc -Ob2" -D_WINDOWS -DNDEBUG -DAPI_EXPORTS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -D_WINDLL -D_MBCS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdmyplugins.dir\Release\vc143.pdb /FS /MD /GR" -o myplugins.dir\Release\yololayer.obj "J:\tensorrtx\yolov8\plugin\yololayer.cu"”已退出,返回代码为 1。

我在ubuntu22里面编译不报错呢

@lindsayshuo
Copy link
Contributor

在win10下编译 tensorrtx-yolov8 出现如下错误: 【1】、 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): error : expression must have a constant value 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): note #2689-D: the value of variable "maxGrids" 2>(261): here cannot be used as a constant 【2】、 C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\CUDA 11.7.targets(790,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe" --use-local-env -ccbin "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64" -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -IJ:\tensorrtx\yolov8\include -I"I:\TensorRT-8.6.1.6\include" -I"I:\TensorRT-8.6.1.6\samples\common" -IJ:\tensorrtx\yolov8\plugin -II:\opencv\build\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" --keep-dir myplugins\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -std=c++11 -Xcompiler="/EHsc -Ob2" -D_WINDOWS -DNDEBUG -DAPI_EXPORTS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -D_WINDLL -D_MBCS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdmyplugins.dir\Release\vc143.pdb /FS /MD /GR" -o myplugins.dir\Release\yololayer.obj "J:\tensorrtx\yolov8\plugin\yololayer.cu"”已退出,返回代码为 1。

我在ubuntu22里面编译不报错呢

你用的最新版本吗

@lindsayshuo
Copy link
Contributor

在win10下编译 tensorrtx-yolov8 出现如下错误: 【1】、 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): error : expression must have a constant value 2>J:\tensorrtx\yolov8\plugin\yololayer.cu(262): note #2689-D: the value of variable "maxGrids" 2>(261): here cannot be used as a constant 【2】、 C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations\CUDA 11.7.targets(790,9): error MSB3721: 命令“"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin\nvcc.exe" --use-local-env -ccbin "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\bin\HostX64\x64" -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" -IJ:\tensorrtx\yolov8\include -I"I:\TensorRT-8.6.1.6\include" -I"I:\TensorRT-8.6.1.6\samples\common" -IJ:\tensorrtx\yolov8\plugin -II:\opencv\build\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include" --keep-dir myplugins\x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -std=c++11 -Xcompiler="/EHsc -Ob2" -D_WINDOWS -DNDEBUG -DAPI_EXPORTS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -D_WINDLL -D_MBCS -D"CMAKE_INTDIR="Release"" -Dmyplugins_EXPORTS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdmyplugins.dir\Release\vc143.pdb /FS /MD /GR" -o myplugins.dir\Release\yololayer.obj "J:\tensorrtx\yolov8\plugin\yololayer.cu"”已退出,返回代码为 1。

确保你的 CUDA Toolkit 和对应的 Visual Studio 插件版本相兼容,有时候版本不匹配也会导致编译错误。如果你不确定,可以检查 NVIDIA 官方文档,了解你的 CUDA Toolkit 版本支持的 Visual Studio 版本。

@cronousbaby
Copy link
Author

谢谢答复,我晚上再试验一下

@manfrey666
Copy link

谢谢答复,我晚上再试验一下

请问你解决了吗,我遇到同样问题

@manfrey666
Copy link

manfrey666 commented May 13, 2024

谢谢答复,我晚上再试验一下

请问你解决了吗,我遇到同样问题

好像是 mStridesLength 不能在编译时确定的问题
我对 yololayer.cu 做了如下修改后不报错了:

    //const int maxGrids = mStridesLength;
    //int grids[maxGrids][2];
    //for (int i = 0; i < maxGrids; ++i) {
    //    grids[i][0] = mYoloV8netHeight / mStrides[i];
    //    grids[i][1] = mYoloV8NetWidth / mStrides[i];
    //}

    const int maxGrids = mStridesLength;
    int** grids = new int*[maxGrids];
    for (int i = 0; i < maxGrids; ++i) {
        grids[i] = new int[2];
        grids[i][0] = mYoloV8netHeight / mStrides[i];
        grids[i][1] = mYoloV8NetWidth / mStrides[i];
    }

    for (unsigned int i = 0; i < maxGrids; i++) {
        int grid_h = grids[i][0];
        int grid_w = grids[i][1];
        int stride = mStrides[i];
        numElem = grid_h * grid_w * batchSize;
        if (numElem < mThreadCount)
            mThreadCount = numElem;

        CalDetection<<<(numElem + mThreadCount - 1) / mThreadCount, mThreadCount, 0, stream>>>(
                inputs[i], output, numElem, mMaxOutObject, grid_h, grid_w, stride, mClassCount, mNumberofpoints,
                mConfthreshkeypoints, outputElem, is_segmentation_, is_pose_);
    }

    // 释放内存
    for (int i = 0; i < maxGrids; ++i) {
        delete[] grids[i];
    }
    delete[] grids;

@lindsayshuo
Copy link
Contributor

lindsayshuo commented May 13, 2024

    int maxGrids = mStridesLength;
    int flatGridsLen = 2 * maxGrids;
    int* flatGrids = new int[flatGridsLen];

    for (int i = 0; i < maxGrids; ++i) {
        flatGrids[2*i] = mYoloV8netHeight / mStrides[i];
        flatGrids[2*i + 1] = mYoloV8NetWidth / mStrides[i];
    }



    for (unsigned int i = 0; i < maxGrids; i++) {
        // Access the elements of the original 2D array from the flattened 1D array
        int grid_h = flatGrids[2*i];     // Corresponds to the access of grids[i][0]
        int grid_w = flatGrids[2*i + 1]; // Corresponds to the access of grids[i][1]
        int stride = mStrides[i];
        numElem = grid_h * grid_w * batchSize; // Calculate the total number of elements
        if (numElem < mThreadCount)            // Adjust the thread count if needed
            mThreadCount = numElem;

        // The CUDA kernel call remains unchanged
        CalDetection<<<(numElem + mThreadCount - 1) / mThreadCount, mThreadCount, 0, stream>>>(
                inputs[i], output, numElem, mMaxOutObject, grid_h, grid_w, stride, mClassCount, mNumberofpoints,
                mConfthreshkeypoints, outputElem, is_segmentation_, is_pose_);
    }

    delete[] flatGrids;
可以这样改,一维数组简化开销,增大效率  

@manfrey666
Copy link

manfrey666 commented May 13, 2024

好的,感谢

@cronousbaby
Copy link
Author

是的,已经测试,按照上面的方式

@lindsayshuo
Copy link
Contributor

lindsayshuo commented May 14, 2024

@lindsayshuo
Copy link
Contributor

lindsayshuo commented May 14, 2024

是的,已经测试,按照上面的方式

好的,感谢

#1524

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants