Ethereum CUDA Mining with nvidia-docker

Somebody has done quite a good job : https://github.com/Anthony-Tatowicz/docker-ethminer

But, if you're using Nvidia's Pascal cards, you're better off using CUDA 8.0 not 7.5 as of the above's Dockerfile says.

So the new Dockerfile should be begin with:

FROM nvidia/cuda:8.0-devel-ubuntu14.04  

But, if you rush to building it now, if you like me, you will find some errors during cmake, here is one of them :

Building NVCC (Device) object libethash-cuda/CMakeFiles/ethash-cuda.dir/ethash-cuda_generated_ethash_cuda_miner_kernel.cu.o  

Fortunately, there are others facing the very same problem as well, here is the thread: https://forum.ethereum.org/discussion/2227/cuda-miner/p34

And here is the response from the author of CUDA cpp-ethereum, namely Genoil:

@Cubirez yes ran into that myself too. This was caused by somebody who tried to make copatibility with Fedora work. I'll fix it in the rep later, but for now, add --std=c++11 to the NVCC flags in CMakelists.txt in libethash-cuda folder

So, actually, you have to make some change to the cloned source.

Here, I will change the course of the Dockerfile a bit, so that we can do the change :

git clone https://github.com/Genoil/cpp-ethereum.git  
cd cpp-ethereum/libethash-cuda  
vim CMakeLists.txt  

Change from

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--disable-warnings;--ptxas-options=-v;-use_fast_math;-lineinfo)  

To, by adding --std=c++11; :

set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};--std=c++11;--disable-warnings;--ptxas-options=-v;-use_fast_math;-lineinfo)  

Now, to the Dockerfile, instead of cloning we will be copying instead:

COPY cpp-ethereum /cpp-ethereum  
RUN cd cpp-ethereum \  
    && mkdir build \
    && cd build \
    && cmake -DBUNDLE=cudaminer -DCOMPUTE=61 .. \
    && make -j8 \
    && mkdir /data

Note : I added -DCOMPUTE=61 flag because I use GTX 1060, this should be optional, but it feels better being explicit.

It should work now!

Try :

nvidia-docker run -it --rm <yourimage> /cpp-ethereum/build/ethminer/ethminer -U --benchmark  

Note : use -U not -G; since -G = opencl, -U = cuda

I got something like

[CUDA]:Using grid size 8192, block size 128

Benchmarking on platform: CUDA  
Preparing DAG for block #0  
Warming up...  
  ℹ  08:21:53|cudaminer0  set work; seed: #00000000, target:  #000000000000
  ℹ  08:21:53|cudaminer0  Initialising miner...
Using device: GeForce GTX 1060 6GB (Compute 6.1)  
Generating DAG for GPU #0  
CUDA#0: 0%  
CUDA#0: 6%  
CUDA#0: 12%  
CUDA#0: 19%  
CUDA#0: 25%  
CUDA#0: 31%  
CUDA#0: 38%  
CUDA#0: 44%  
CUDA#0: 50%  
CUDA#0: 56%  
CUDA#0: 62%  
CUDA#0: 69%  
CUDA#0: 75%  
CUDA#0: 81%  
CUDA#0: 88%  
CUDA#0: 94%  
Trial 1... 18874368  
Trial 2... 19223893  
Trial 3... 19223893  
Trial 4... 19223893  
Trial 5... 19223893  
min/mean/max: 18874368/19153988/19223893 H/s  
inner mean: 6407964 H/s  

Konpat Preechakul

Read more posts by this author.