Projet

Général

Profil

Install the platform » Historique » Version 52

Arnaud Sevin, 13/02/2017 14:46

1 14 Arnaud Sevin
{{toc}}
2 1 Damien Gratadour
3 48 Arnaud Sevin
h1. Install Anaconda with python2
4 1 Damien Gratadour
5 49 Arnaud Sevin
more info: https://www.continuum.io/downloads#linux
6
7 1 Damien Gratadour
h2. Download and installation
8 49 Arnaud Sevin
9 48 Arnaud Sevin
* wget https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh
10
* bash ./Anaconda2-4.2.0-Linux-x86_64.sh
11
* update your .batchrc
12
  add anaconda2/bin into the $PATH
13
14 1 Damien Gratadour
h2. add more packets
15 49 Arnaud Sevin
16 52 Arnaud Sevin
To avoid any incompatibility this python modules, it's highly recommended to use the one provided with anaconda:
17
18 48 Arnaud Sevin
* conda install gcc pyqtgraph
19
20 1 Damien Gratadour
h1. Install MAGMA
21 24 pierre kestener
22 36 Damien Gratadour
h2. Why MAGMA ?
23 1 Damien Gratadour
24
The MAGMA project aims to develop a dense linear algebra library similar to LAPACK but for heterogeneous/hybrid architectures, starting with current "Multicore+GPU" systems.
25
26 26 Arnaud Sevin
Unlike CULA, MAGMA propose a dense linear algebra library handling double for free.
27
28 1 Damien Gratadour
But MAGMA needs a LAPACK and a BLAS implementation. Actually, we try two options : openBLAS (free, easy to install) and MKL (free, need a registration but better optimized on Intel processors)
29
30 28 Arnaud Sevin
h2. Configure MAGMA with openBLAS
31 1 Damien Gratadour
32 28 Arnaud Sevin
h3. Dependencies : openblas (http://www.openblas.net)
33 1 Damien Gratadour
34 28 Arnaud Sevin
First, clone the GIT repository:
35
<pre>
36
git clone https://github.com/xianyi/OpenBLAS.git
37 1 Damien Gratadour
</pre>
38 28 Arnaud Sevin
39
compile it:
40 1 Damien Gratadour
<pre>
41 28 Arnaud Sevin
cd OpenBLAS/
42
make
43 14 Arnaud Sevin
</pre>
44 1 Damien Gratadour
45 28 Arnaud Sevin
install it:
46
<pre>
47 48 Arnaud Sevin
sudo make install PREFIX=$HOME/local/openblas
48 28 Arnaud Sevin
</pre>
49
50 1 Damien Gratadour
add to you .bashrc:
51 51 Arnaud Sevin
<pre><code class="PHP">
52 48 Arnaud Sevin
export OPENBLAS_ROOT=$HOME/local/openblas
53 51 Arnaud Sevin
</code></pre>
54 1 Damien Gratadour
55
h3. extraction
56 14 Arnaud Sevin
57 1 Damien Gratadour
MAGMA is available here : http://icl.cs.utk.edu/magma/software/index.html
58 14 Arnaud Sevin
59
extract the tgz file and go into the new directory
60 48 Arnaud Sevin
> ~$ tar xf magma-2.1.0.tar.gz
61
> ~$ cd magma-2.1.0
62 14 Arnaud Sevin
63
h3. configuration
64 1 Damien Gratadour
65 28 Arnaud Sevin
You have to create your own make.inc based on make.inc.openblas:
66 1 Damien Gratadour
67 37 Damien Gratadour
example : *please verify GPU_TARGET, OPENBLASDIR, CUDADIR*
68 1 Damien Gratadour
69 50 Arnaud Sevin
<pre><code class="PHP">
70 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
71 28 Arnaud Sevin
#   -- MAGMA (version 1.7.0) --
72 1 Damien Gratadour
#      Univ. of Tennessee, Knoxville
73
#      Univ. of California, Berkeley
74
#      Univ. of Colorado, Denver
75 28 Arnaud Sevin
#      @date September 2015
76 1 Damien Gratadour
#//////////////////////////////////////////////////////////////////////////////
77
78 28 Arnaud Sevin
# GPU_TARGET contains one or more of Tesla, Fermi, or Kepler,
79
# to specify for which GPUs you want to compile MAGMA:
80
#     Tesla  - NVIDIA compute capability 1.x cards (no longer supported in CUDA 6.5)
81
#     Fermi  - NVIDIA compute capability 2.x cards
82
#     Kepler - NVIDIA compute capability 3.x cards
83
# The default is "Fermi Kepler".
84 1 Damien Gratadour
# See http://developer.nvidia.com/cuda-gpus
85 28 Arnaud Sevin
#
86
GPU_TARGET ?= Kepler
87 1 Damien Gratadour
88 28 Arnaud Sevin
# --------------------
89
# programs
90 1 Damien Gratadour
91
CC        = gcc
92 28 Arnaud Sevin
CXX       = g++
93 1 Damien Gratadour
NVCC      = nvcc
94
FORT      = gfortran
95
96
ARCH      = ar
97
ARCHFLAGS = cr
98
RANLIB    = ranlib
99
100
101 28 Arnaud Sevin
# --------------------
102
# flags
103 1 Damien Gratadour
104 28 Arnaud Sevin
# Use -fPIC to make shared (.so) and static (.a) library;
105
# can be commented out if making only static library.
106
FPIC      = -fPIC
107 14 Arnaud Sevin
108 28 Arnaud Sevin
CFLAGS    = -O3 $(FPIC) -DADD_ -Wall -fopenmp 
109
FFLAGS    = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument
110
F90FLAGS  = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument -x f95-cpp-input
111
NVCCFLAGS = -O3         -DADD_       -Xcompiler "$(FPIC)"
112 14 Arnaud Sevin
LDFLAGS   =     $(FPIC)              -fopenmp
113 1 Damien Gratadour
114 28 Arnaud Sevin
115
# --------------------
116 17 Arnaud Sevin
# libraries
117 1 Damien Gratadour
118 28 Arnaud Sevin
# gcc with OpenBLAS (includes LAPACK)
119
LIB       = -lopenblas
120 17 Arnaud Sevin
121 28 Arnaud Sevin
LIB      += -lcublas -lcudart
122 17 Arnaud Sevin
123
124 28 Arnaud Sevin
# --------------------
125
# directories
126 17 Arnaud Sevin
127 28 Arnaud Sevin
# define library directories preferably in your environment, or here.
128 48 Arnaud Sevin
OPENBLASDIR = $(HOME)/local/openblas
129 28 Arnaud Sevin
CUDADIR = /usr/local/cuda
130
-include make.check-openblas
131
-include make.check-cuda
132 17 Arnaud Sevin
133 28 Arnaud Sevin
LIBDIR    = -L$(CUDADIR)/lib64 \
134
            -L$(OPENBLASDIR)/lib
135 17 Arnaud Sevin
136
INC       = -I$(CUDADIR)/include
137
</code></pre>
138
139
h2. Configure MAGMA with MKL
140
141
h3. extraction
142
143
To download MKL, you have to create a account here : https://registrationcenter.intel.com/RegCenter/NComForm.aspx?ProductID=1517
144
145
extract l_ccompxe_2013_sp1.1.106.tgz and go into l_ccompxe_2013_sp1.1.106
146
147
install it with ./install_GUI.sh and add IPP stuff to default choices
148
149
h3. configuration
150
151 28 Arnaud Sevin
You have to create your own make.inc based on make.inc.mkl-gcc-ilp64:
152
153
example: *please verify GPU_TARGET, MKLROOT, CUDADIR*
154 50 Arnaud Sevin
<pre><code class="PHP">
155 17 Arnaud Sevin
#//////////////////////////////////////////////////////////////////////////////
156 28 Arnaud Sevin
#   -- MAGMA (version 1.7.0) --
157 19 Arnaud Sevin
#      Univ. of Tennessee, Knoxville
158
#      Univ. of California, Berkeley
159 17 Arnaud Sevin
#      Univ. of Colorado, Denver
160 28 Arnaud Sevin
#      @date September 2015
161 17 Arnaud Sevin
#//////////////////////////////////////////////////////////////////////////////
162 14 Arnaud Sevin
163
# GPU_TARGET contains one or more of Tesla, Fermi, or Kepler,
164
# to specify for which GPUs you want to compile MAGMA:
165 28 Arnaud Sevin
#     Tesla  - NVIDIA compute capability 1.x cards (no longer supported in CUDA 6.5)
166 14 Arnaud Sevin
#     Fermi  - NVIDIA compute capability 2.x cards
167
#     Kepler - NVIDIA compute capability 3.x cards
168 28 Arnaud Sevin
# The default is "Fermi Kepler".
169 14 Arnaud Sevin
# See http://developer.nvidia.com/cuda-gpus
170
#
171 28 Arnaud Sevin
#GPU_TARGET ?= Fermi Kepler
172 14 Arnaud Sevin
173 28 Arnaud Sevin
# --------------------
174
# programs
175
176 20 Arnaud Sevin
CC        = gcc
177 28 Arnaud Sevin
CXX       = g++
178 20 Arnaud Sevin
NVCC      = nvcc
179
FORT      = gfortran
180
181
ARCH      = ar
182
ARCHFLAGS = cr
183 1 Damien Gratadour
RANLIB    = ranlib
184 20 Arnaud Sevin
185 1 Damien Gratadour
186
# --------------------
187
# flags
188
189
# Use -fPIC to make shared (.so) and static (.a) library;
190
# can be commented out if making only static library.
191
FPIC      = -fPIC
192
193
CFLAGS    = -O3 $(FPIC) -DADD_ -Wall -Wshadow -fopenmp -DMAGMA_WITH_MKL
194
FFLAGS    = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument
195
F90FLAGS  = -O3 $(FPIC) -DADD_ -Wall -Wno-unused-dummy-argument -x f95-cpp-input
196
NVCCFLAGS = -O3         -DADD_       -Xcompiler "$(FPIC) -Wall -Wno-unused-function"
197
LDFLAGS   =     $(FPIC)              -fopenmp
198
199
# Defining MAGMA_ILP64 or MKL_ILP64 changes magma_int_t to int64_t in include/magma_types.h
200
CFLAGS    += -DMKL_ILP64
201
FFLAGS    += -fdefault-integer-8
202
F90FLAGS  += -fdefault-integer-8
203
NVCCFLAGS += -DMKL_ILP64
204
205
# Options to do extra checks for non-standard things like variable length arrays;
206
# it is safe to disable all these
207
CFLAGS   += -pedantic -Wno-long-long
208
#CFLAGS   += -Werror  # uncomment to ensure all warnings are dealt with
209
CXXFLAGS := $(CFLAGS) -std=c++98
210
CFLAGS   += -std=c99
211
212
213
# --------------------
214
# libraries
215
216
# IMPORTANT: this link line is for 64-bit int !!!!
217
# For regular 64-bit builds using 64-bit pointers and 32-bit int,
218
# use the lp64 library, not the ilp64 library. See make.inc.mkl-gcc or make.inc.mkl-icc.
219
# see MKL Link Advisor at http://software.intel.com/sites/products/mkl/
220
# gcc with MKL 10.3, Intel threads, 64-bit int
221
# note -DMAGMA_ILP64 or -DMKL_ILP64, and -fdefault-integer-8 in FFLAGS above
222
LIB       = -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread -lstdc++ -lm -liomp5 -lgfortran
223
224
LIB      += -lcublas -lcudart
225
226
227
# --------------------
228
# directories
229
230
# define library directories preferably in your environment, or here.
231
# for MKL run, e.g.: source /opt/intel/composerxe/mkl/bin/mklvars.sh intel64
232
#MKLROOT ?= /opt/intel/composerxe/mkl
233
#CUDADIR ?= /usr/local/cuda
234
-include make.check-mkl
235
-include make.check-cuda
236
237
LIBDIR    = -L$(CUDADIR)/lib64 \
238
            -L$(MKLROOT)/lib/intel64
239
240
INC       = -I$(CUDADIR)/include \
241
            -I$(MKLROOT)/include
242
</code></pre>
243
244
In this example, I use gcc but with MKL, you can use icc instead of gcc. In this case, you have to compile yorick with icc. For this, you have to change the CC flag in Make.cfg  
245
246
h2. compilation and installation
247
248
h3. compilation
249
250
just compile the shared target (and test if you want)
251
> ~$ make -j 8 shared sparse
252
253
h3. installation
254
255
To install libraries and include files in a given prefix, run:
256 48 Arnaud Sevin
> ~$ make install prefix=$HOME/local/magma
257 1 Damien Gratadour
  
258
The default prefix is /usr/local/magma. You can also set prefix in make.inc.
259
260 38 Damien Gratadour
h3. tuning (not tested)
261 1 Damien Gratadour
262 38 Damien Gratadour
For multi-GPU functions, set $MAGMA_NUM_GPUS to set the number of GPUs to use.
263 29 Arnaud Sevin
For multi-core BLAS libraries, set $OMP_NUM_THREADS or $MKL_NUM_THREADS or $VECLIB_MAXIMUM_THREADS to set the number of CPU threads, depending on your BLAS library.
264
265
h1. Install the platform
266
267
The COMPASS platform is distributed as a single bundle of CArMA and SuTrA C++ / Cuda libraries and their Python extensions NAGA & SHESHA. 
268
269
h2. Hardware requirements
270
271
The system must contain at least an x86 CPU and a CUDA capable GPU. list of compatible GPUs can be found here http://www.nvidia.com/object/cuda_gpus.html. Specific requirements apply to clusters (to be updated).
272 41 Arnaud Sevin
273 29 Arnaud Sevin
h2. Environment requirements
274
275
The system must be running a 64 bit distribution of Linux with the latest NVIDIA drivers and "CUDA toolkit":https://developer.nvidia.com/cuda-downloads. The following installation instructions are valid if the default installation paths have been selected for these components.
276
277 47 Arnaud Sevin
Additionally, to benefit from the user-oriented features of the platform, Anaconda2 should be installed (https://www.continuum.io/downloads#_unix).
278 29 Arnaud Sevin
In the last versions of compass (r608+), Yorick is no more supported.
279
280
h2. Installation process
281
282
First check out the latest version from the svn repository :
283
<pre>
284 39 Arnaud Sevin
svn co https://version-lesia.obspm.fr/repos/compass/trunk compass
285 1 Damien Gratadour
</pre>
286 29 Arnaud Sevin
then go in the newly created directory and then trunk:
287
<pre>
288 39 Arnaud Sevin
cd compass
289 29 Arnaud Sevin
</pre>
290
once there, you need to modify system variables in our .bashrc :
291 50 Arnaud Sevin
<pre><code class="PHP">
292 29 Arnaud Sevin
# CUDA default definitions
293
export CUDA_ROOT=$CUDA_ROOT #/usr/local/cuda
294
export CUDA_INC_PATH=$CUDA_ROOT/include
295
export CUDA_LIB_PATH=$CUDA_ROOT/lib
296 1 Damien Gratadour
export CUDA_LIB_PATH_64=$CUDA_ROOT/lib64
297 29 Arnaud Sevin
export PATH=$CUDA_ROOT/bin:$PATH
298 51 Arnaud Sevin
export LD_LIBRARY_PATH=$CUDA_LIB_PATH_64:$CUDA_LIB_PATH:$LD_LIBRARY_PATH
299 50 Arnaud Sevin
</code></pre>
300 1 Damien Gratadour
in this file, you also have to indicate the proper architecture of your GPU so as the compiler will generate the appropriate code.
301 50 Arnaud Sevin
<pre><code class="PHP">
302 33 Arnaud Sevin
export GENCODE="arch=compute_52,code=sm_52"
303 50 Arnaud Sevin
</code></pre>
304 48 Arnaud Sevin
and change both 52 to your architecture : for instance a Tesla Fermi will have 2.0 computing capabilities so change 52 to 20, a Kepler GPU will have 3.0 or 3.5 (K20) computing capabilities, change 52 to 30 (or 35), a Maxwell GPU have 5.2 (M6000), a Pascal have 6.0 (P100). 
305 43 Arnaud Sevin
(more informations here: https://developer.nvidia.com/cuda-gpus)
306 29 Arnaud Sevin
307
If you are using CULA, you have to specify it:
308 50 Arnaud Sevin
<pre><code class="PHP">
309 29 Arnaud Sevin
# CULA default definitions
310
export CULA_ROOT= /usr/local/cula
311
export CULA_INC_PATH= $CULA_ROOT/include
312 1 Damien Gratadour
export CULA_LIB_PATH= $CULA_ROOT/lib
313 29 Arnaud Sevin
export CULA_LIB_PATH_64= $CULA_ROOT/lib64
314 51 Arnaud Sevin
export LD_LIBRARY_PATH=$CULA_LIB_PATH_64:$CULA_LIB_PATH:$LD_LIBRARY_PATH
315 50 Arnaud Sevin
</code></pre>
316 29 Arnaud Sevin
317
If you are using MAGMA, you have to specify it:
318 50 Arnaud Sevin
<pre><code class="PHP">
319 29 Arnaud Sevin
# MAGMA definitions (uncomment this line if MAGMA is installed)
320 1 Damien Gratadour
export MAGMA_ROOT=$HOME/local/magma
321
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MAGMA_ROOT/lib
322
export PKG_CONFIG_PATH=$MAGMA_ROOT/lib/pkgconfig
323 50 Arnaud Sevin
</code></pre>
324 1 Damien Gratadour
325
Last variables to define:
326
<pre><code class="PHP">
327
export COMPASS_ROOT=/path/to/compass/trunk
328
export NAGA_ROOT=$COMPASS_ROOT/naga
329
export SHESHA_ROOT=$COMPASS_ROOT/shesha
330 51 Arnaud Sevin
export LD_LIBRARY_PATH=$COMPASS_ROOT/libcarma:$COMPASS_ROOT/libsutra:$LD_LIBRARY_PATH
331 50 Arnaud Sevin
</code></pre>
332
333
At the end, you .bashrc shoud containts all those informations:
334
<pre><code class="PHP">
335
# conda default definitions
336
export CONDA_ROOT=/your/path/anaconda2
337
export PATH=$CONDA_ROOT/bin:$PATH
338
339
# CUDA default definitions
340
export CUDA_INC_PATH=$CUDA_ROOT/include
341 1 Damien Gratadour
export CUDA_LIB_PATH=$CUDA_ROOT/lib
342 50 Arnaud Sevin
export CUDA_LIB_PATH_64=$CUDA_ROOT/lib64
343
export PATH=$CUDA_ROOT/bin:$PATH
344 51 Arnaud Sevin
export LD_LIBRARY_PATH=$CUDA_LIB_PATH_64:$CUDA_LIB_PATH:$LD_LIBRARY_PATH
345 50 Arnaud Sevin
export GENCODE="arch=compute_52,code=sm_52"
346
347
# MAGMA definitions
348
export MAGMA_ROOT=$HOME/local/magma
349
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MAGMA_ROOT/lib
350
export PKG_CONFIG_PATH=$MAGMA_ROOT/lib/pkgconfig
351
352 1 Damien Gratadour
# COMPASS default definitions
353 50 Arnaud Sevin
export COMPASS_ROOT=/your/path/compass
354
export NAGA_ROOT=$COMPASS_ROOT/naga
355
export SHESHA_ROOT=$COMPASS_ROOT/shesha
356 51 Arnaud Sevin
export LD_LIBRARY_PATH=$COMPASS_ROOT/libcarma:$COMPASS_ROOT/libsutra:$LD_LIBRARY_PATH
357 50 Arnaud Sevin
</code></pre>
358 29 Arnaud Sevin
359
Once this is done, you're ready to compile the whole library:
360
<pre>
361 44 Arnaud Sevin
make clean all
362 29 Arnaud Sevin
</pre>
363
364
If you did not get any error, CArMA, SuTrA, NAGA and SHESHA are now installed on your machine. You can check that everything is working by launching a GUI to test a simulation:
365
<pre>
366 45 Arnaud Sevin
ipython -i $SHESHA_ROOT/widgets/widget_ao.py
367 29 Arnaud Sevin
</pre>