Closed hstdt closed 4 years ago
不开ACNet,用Anime4K09算法的GPU加速呢,是否会崩溃? CLI程序的GPU加速呢? 注意到你同时打开了GPU加速和ACNet的GPU加速,这两者同时打开一般是没什么问题的,OpenCL设备初始化两次是可以的,但不排除这会在某些系统上引起问题,开启ACNet的GPU加速并不需要开启GPU加速。
@TianZerL
是这个页面的勾选全部去掉么。这样设置的话不崩溃,输出的文件有音频,但是视频内容全是红色。
尝试过CLI,但是不太会用。 -i 参数不知道怎么输入文件路径,使用绝对路径提示无法读取或者文件格式错误(同样的路径GUI没问题)。 另外同时-o应该只有文件名吧,也不知道怎么自定义输出文件夹(当前文件么,没调用成功过)。
GPU 加速有可能是未选中且不可选状态(所以我以为这个选项在ACNet上是不起作用的。这里只是GUI的问题么?按照下面第二张图的方案。刚试了一下,钩上GPU后1分钟44秒的视频要约1个半小时,应该是用上了GPU的速度?)
另外文件名可以支持下中文字符嘛😄
开启ACNet后,GPU加速只勾选GPU acceleration for ACNet, 下方的GPU加速不是针对ACNet的(针对的是Anime4K09算法),正常处理时间就是在视频长度左右,根据显卡来。1分钟44秒的视频要约1个半小时显然是不正常的,就算是对CPU来说也很慢(I5 4590大概25分钟),除非您的CPU比较弱一点. CLI读取视频必须加-v参数,否则当作图片读取,就会提示错误。-o就可以带路径,输出到哪里就写到哪里。处理文件夹的话,你就在输入输出写文件夹路径就行,会自动判断。请参考Wiki
您提到视频内容全是红色但纯CPU运算是正常的,我觉得您的OpenCL支持可能有些问题,崩溃的原因可能也在此,在较新的macOS中,Apple公司在有意弱化OpenCL的作用并逐步停止支持,后续可能完全移除,以推广自家的metal API
给您一个启用ACNet和GPU加速的CLI指令参考
./Anime4KCPP_CLI -i "~/home/user/test.mp4" -wqHv -o "~/home/user/test_out.mp4"
@TianZerL 我试下,我原来的没加引号。输出结果如下
/Users/tdt/Documents/Code/GitHub/Anime4KCPP/bin/Anime4KCPP_CLI -i "/Users/tdt/Movies/Test/1.mp4" -wqHv -o "/Users/tdt/Movies/Test/1@2x.mp4"
Platform: Apple
Device: AMD Radeon Pro Vega 48 Compute Engine
ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.3 (clang-1103.0.32.62)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3_1 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
----------------------------------------------
Welcome to Anime4KCPP
----------------------------------------------
FPS: 30
Threads: 16
Total frames: 2071
1920x1080 to 3840x2160
----------------------------------------------
Processor type: GPU CNN
----------------------------------------------
Zoom Factor: 2
HDN Mode: true
----------------------------------------------
----------------------------------------------
Filters does not support CNN mode
----------------------------------------------
Processing...
libc++abi.dylib: terminating with uncaught exception of type char const*
zsh: abort /Users/tdt/Documents/Code/GitHub/Anime4KCPP/bin/Anime4KCPP_CLI -i -wqHv -o
刚又测试了一个1分6秒的文件,30帧,这次是26分钟。可能是第一次哪里设置的不对吧。
libc++abi.dylib: terminating with uncaught exception of type char const*
抛出了一个未经处理的异常,看起来这就是问题所在,您是否可以自定义CLI的main函数,尝试捕捉这个异常?将整个main函数的代码用try包起来。我不确定这是在macOS上独有的问题还是因为最新的提交导致的问题,待我在windows下测试一下。
我在windows下测试并没有问题。用同样的CLI参数,处理图片正常吗? 鉴于您在使用Anime4K09算法的GPU加速时并不会崩溃,您可以尝试关闭build_in_kernel编译选项,然后将源码中两个.cl文件复制到您的命令行工作目录,尝试外部读取.cl
libc++abi.dylib: terminating with uncaught exception of type char const*
抛出了一个未经处理的异常,看起来这就是问题所在,您是否可以自定义CLI的main函数,尝试捕捉这个异常?将整个main函数的代码用try包起来。我不确定这是在macOS上独有的问题还是因为最新的提交导致的问题,待我在windows下测试一下。
尝试进行catch(第一次catch cli),但是没能看到catch。是这样弄么。
这样的外部try catch应该不行吧。在CLI/src/main.cpp中,将所有的main函数代码复制到try-catch块中,然后重新编译。
int main()
{
try
{
//code
}
catch(char const * err)
{
std::cerr<<err<<std::endl;
}
return 0;
}
源码中我应该处理了所有可能出现的错误,因此现在我也不很清楚这个异常是谁抛出来的,主要就是想搞清楚这一点。
try放到最上面,重新make,还是相同输出。
libc++abi.dylib: terminating with uncaught exception of type char const*
请尝试在CMakeLists.txt中显示添加异常处理选项,您也可以将优化等级从O3降至O2(修改CMakeLists.txt后您需要重新执行CMake再编译),也请尝试我之前提到的使用外置cl文件
if(WIN32)
set(CMAKE_CXX_FLAGS "-O3 -fopenmp")
else()
set(CMAKE_CXX_FLAGS "-O3 -lpthread -fopenmp -fexceptions -stdlib=stdlibc++")
endif()
直接添加上面的代码编译不通过,修改后编译通过(是这样么)。
O3降到O2,以及外置cl文件,如何操作
您只需要将项目目录下的CMakeLists.txt文件中相同的位置的代码改为我说的就行了(是根目录下的文件而不是CLI文件夹下的),您打开那个文件就能看到这段代码了。O3改O2就把set(CMAKE_CXX_FLAGS "-O3 -lpthread -fopenmp -fexceptions -stdlib=stdlibc++")
的-O3改为-O2即可。
外部读取CL则是,关闭build_in_kernel编译选项(CMakez中),然后将源码中两个.cl文件复制到您的命令行工作目录,即命令行中显示的目录,外部读取.cl
修改后,编译不通过
那应该是macOS下默认没有stdlibc++库,请先暂时去掉这个参数 搜索后发现该库在xcode10中已被移除😂,使用-lc++代替-stdlib=stdlibc++即可
按照这个编译通过,报错内容还是没变化 😂
那就请您试试O2优化和外置cl吧,实在不行的话,只能试试在macOS上用G++而非Clang进行编译了,我现在不也清楚为什么macOS上无法捕获错误(至少在clang上)😂在Linux和Window下都很正常
O3->O2也不行.
外置cl要怎么操作,G++又咋弄...
关闭build_in_kernel编译选项(CMake中),然后将源码中两个.cl文件复制到您的命令行工作目录 G++的话,搜索一下如何在macOS上安装g++编译器即可
关闭build_in_kernel编译选项(CMake中),然后将源码中两个.cl文件复制到您的命令行工作目录 G++的话,搜索一下如何在macOS上安装g++编译器即可
build_in_kernel方案对我有点超纲了,不知道怎么操作...我捣鼓一下g++试试吧
g++倒是已经装好了,就是不知道咋用。
在经过搜索后,问题应该就在macOS自带的库身上,因此用g++编译应该是最好的方法。 (cmake的时候加上这样的命令cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++) 抱歉,由于我没有mac设备,也没办法亲自调试,只能请您来尝试了😂 参考cmake命令
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ..
修改完成后,cmake的输出中应该显示编译器为gcc和g++而不是clang10
先运行
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++
再make么,改回了原来的CMakeLists否则编译不过,但是还是没能看到输出...
假设您的build目录在项目目录中的build里,则您应该cd到build目录,执行
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ..
最后的两点不能省,此时应该输出cmake信息 之后再执行make
是这么干的,还是老样子输出。用..
也试过了
😂,您试试图片处理呢,可以用吗,吧-wqHv的v去掉,输入一张图片
也不行...
这下总算是定位到问题了,我大概明白是怎么回事了,问题就在OpenCL上,您在视频处理的时候加上-D参数应该也能得到这个结果。这个error就是opencl的初始化没通过,但因为我在视频处理的时候用了多线程,没能捕获到其他线程抛出的错误,所以一直显示未捕获错误。待我检查一下代码。
由于OpenCL相关代码在其它平台上工作正常,我尝试用NVIDIA的1.2版本(与苹果的版本相同)OpenCL SDK进行编译也未能复现该问题,猜想是Apple SDK的问题或者是macOS 上A卡驱动的问题,请您尝试进行以下修改:
将Anime4KCore/src/Anime4KGPUCNN.cpp源码406行和711行的CL_MEM_WRITE_ONLY改为CL_MEM_READ_WRITE
如果不行的话可能暂时也没有什么好的办法,因为苹果对OpenCL的支持越来越差,很多bug都不解决,只有请您使用CPU进行处理了😭
make之后还是不行...
我就只能先用CPU处理着吧..
那这应该是苹果的SDK实现可能不支持创建这么多的显存缓冲区,因为ACNet需要大量的数据流动,因此需要创建很多缓冲区,这个问题的原因就是最后一个缓冲区无法创建,然而最后一个缓冲区除了这个参数其它和和前面的缓冲区都是一样的,无法创建根本就是没有道理的😭
目前面对相同一张图片,有可能成功,有可能失败,但是就算成功了,内容也不对。用的是修改后的代码,不知道和修改前是否一个效果。
不要开启GPU加速,如果成功而图像内容完全错误说明绝对是OpenCL实现本身有问题,建议您只是用CPU处理,即不要用-q参数和开启GPU加速
嗯,就是再提供一些线索。那就晚安啦😄
查阅相关资料得知苹果已在macOS 10.14正式弃用OpenCL,并且不再提供更新。看来在较新的macOS中,AMD显卡可能没有怎么做OpenCL的支持,因为之前的issue中,有几个macOS用户运行是没问题的,而他们用的应该是intel核显的MacBook。这样的话我这边也没什么办法,抱歉了。感谢您今晚的耐心,帮忙定位问题,晚安啦😀
macOS 10.15.5 + AMD Radeon Pro Vega 48
单独选ACNET+HDN没有问题。如果想更多的信息排查,用中文沟通就行。
log: