Table of Contents

Singularity를 이용해 vivado 설치하기

개요: vivado는 xilinx 개발 환경입니다. 설치할 때 특정 OS 버젼을 맞춰야 하기 때문에 실제 사용중인 서버 등에 설치할 때 까다롭습니다. 컨테이너를 이용하면 운영중인 서버에 영향 없이 사용할 수 있습니다.

컨테이너에는 여러가지 기술이 있지만, singularity는 high performance computing환경에서 많이 사용됩니다. 특히 docker와 달리 이미지를 파일 형태로 배포할 수 있고, 일반 유저 권한으로 실행할 수 있는 점이 편리합니다.

한번 이미지를 생성해 둔 다음에는 sif 파일만 들고 있으면 임의의 OS에서 동일한 리눅스 환경을 재현해 사용할 수 있습니다.

설치 준비를 위한 파일 다운로드

vitis, vivado 등은 xilinx 홈페이지에서 유저 아이디를 입력하고 라이센스 동의 등을 해야 다운로드를 받을 수 있습니다.

아래 링크로 들어갑니다.

아래쪽에서 Archive를 클릭하면, 과거 버전들이 보입니다. 여기에서 2020.1을 선택합니다.

정리하면 아래와 같이 선택합니다.

아래쪽 다운로드 가능한 것들은 받아둡니다.

Vitis 2020.1 버전을 다운로드 받습니다. 아래쪽 링크 Donload Vitis Software 링크 사용하거나, 바로 아래 링크를 방문합니다. 들어가면 아래 화면과 같이 나타납니다. Version에서 2020.1을 선택해 들어갑니다. https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.html

스크롤해서 내려가서 Xilinx Unified Installer 2020.1: Linux Self Extracting Web Installer를 선택해 다운로드 받습니다. 아래쪽 링크를 이용해도 됩니다. https://www.notion.so/hepkhu/Singularity-vivado-29ba053f4dd84e07a696866f653102bb#0eb845e98ae647cc83bb2aaf72350d09

추가 패치를 해서 가능한 디바이스를 추가할 수 있습니다. https://www.notion.so/hepkhu/Singularity-vivado-29ba053f4dd84e07a696866f653102bb#5ee7e6bec22a4d44bd7dee300688eb7b

링크 들어가면 로그인 해야 합니다.

로그인 하고 나면 주소 등의 정보를 자세히 적게 되어 있고, 경우에 따라서는 별도로 동의 버튼을 클릭해야 할 수 있습니다.

파일들을 준비했으면 한 디렉토리에 모아둡니다. 여기에서는 /store/sw/install/xilinx/2020.1 디렉토리를 준비해 넣었다고 합시다.

# ls -alh /store/sw/install/xilinx/2020.1/
total 11G
drwxr-xr-x 2 root root 4.0K Jul 20 23:02 .
drwxr-xr-x 4 root root 4.0K Jul 20 23:01 ..
-rwxr-xr-x 1 root root 117M Jul 20 21:53 Xilinx_Unified_2020.1_0602_1208_Lin64.bin
-rw-r--r-- 1 root root  11G Jul 20 23:01 Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247.tar.gz
-rw-r--r-- 1 root root  71M Jul 20 22:45 xilinx-u200-xdma-201830.2-2580015_18.04.deb
-rw-r--r-- 1 root root 541M Jul 20 22:46 xilinx-u200-xdma-201830.2-dev-2580015_18.04.deb
-rw-r--r-- 1 root root 7.8M Jul 20 23:02 xrt_202010.2.6.655_18.04-amd64-xrt.deb

Singularity로 이미지 만들기

vivado 설치 과정에서 graphic interface를 이용해 마우스를 클릭해가며 옵션을 선택하고 유저 로그인 정보를 다시 입력해야 하기 때문에, 일반적인 컨테이너 이미지를 만드는 과정과는 다르게 직접 조작해 가는 과정이 필요합니다. 여기에서는 singularity sandbox이미지를 만들어 필요한 설치 작업을 완료한 뒤 sif파일로 다시 export 하는 방법을 이용했습니다.

전체적으로 보면,

  1. singlularity sandbox 이미지 생성하고 필수 패키지와 드라이버 설치하기
  2. sandbox image를 write mode로 열어 vivado 수동 설치하기
  3. 임시 파일 정리하기
  4. sif 이미지로 정리하기

순서로 진행합니다.

1. Sandbox 이미지 생성하고 필수 패키지와 드라이버 설치

아래와 같은 singularity 설치 정의 파일을 생성합니다. 참고로 XRT를 직접 컴파일 해 설치할 수도 있습니다.

Bootstrap: docker
From: ubuntu:18.04

%files
        /store/sw/install/xilinx/2020.1 /install
        #/store/sw/install/xilinx/XRT/build/Release /install/XRT_Release

%post
        apt-get update
        apt-get -y install x11-apps udev systemd xorg xauth openbox locales

        cd /install
        apt-get install -y ./xrt_202010.2.6.655_18.04-amd64-xrt.deb
        apt-get install -y ./xilinx-u200-xdma-201830.2-2580015_18.04.deb
        apt-get install -y ./xilinx-u200-xdma-201830.2-dev-2580015_18.04.deb

        #cd /install/XRT_Release
        #apt-get install -y ./xrt_202110.2.11.0_18.04-amd64-container.deb
        #apt-get install -y ./xrt_202110.2.11.0_18.04-amd64-xbflash.deb
        #apt-get install -y ./xrt_202110.2.11.0_18.04-amd64-xrt.deb

        cat > /etc/lsb-release <<EOF
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
EOF

        sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
        locale-gen

%environment
        source /store/sw/Xilinx/Vivado/2020.1/settings64.sh

%runscript
        /bin/bash

singularity명령어를 이용해 이미지를 생성합니다. xilinx_2020.1.1_u200_ubuntu18.04 디렉토리가 생성되며 여기에 샌드박스 이미지가 만들어집니다. (superuser로 실행해야 함)

# singularity build --sandbox xilinx_2020.1.1_u200_ubuntu18.04 xilinx.def
INFO:    Starting build...
Getting image source signatures
Copying blob e7ae86ffe2df [--------------------------------------] 0.0b / 0.0b
Copying config a84320b679 done  
Writing manifest to image destination
Storing signatures
2021/07/21 01:59:15  info unpack layer: sha256:e7ae86ffe2df0787131a4c49ace1b018fd38d62929b007d86bdd1f825e56a852
INFO:    Copying /store/sw/install/xilinx/2020.1 to /store/sw/singularity/xilinx/build-temp-677224236/rootfs/install
INFO:    Running post scriptlet
+ apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
....

(Reading database ... 91996 files and directories currently installed.)
Preparing to unpack .../xilinx-u200-xdma-201830.2-dev-2580015_18.04.deb ...
Unpacking xilinx-u200-xdma-dev (201830.2-2580015) ...
Setting up xilinx-u200-xdma-dev (201830.2-2580015) ...
+ cat
INFO:    Adding environment to container
INFO:    Adding runscript
INFO:    Creating sandbox directory...
INFO:    Build complete: xilinx_2020.1.1_ubuntu18.04

2. Singularity sandbox이미지에 Vivado 설치하기

다음 단계로 vivado를 설치합니다. (볼드 표시한 부분을 유저가 직접 입력)

# singularity run -w xilinx_2020.1.1_u200_ubuntu18.04
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
source: open /store/sw/Xilinx/Vivado/2021.1/settings64.sh: no such file or directory
Singularity> cd /install/
Singularity> ls
Xilinx_Unified_2020.1_0602_1208_Lin64.bin             xilinx-u200-xdma-201830.2-dev-2580015_18.04.deb
Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247.tar.gz  xrt_202010.2.6.655_18.04-amd64-xrt.deb
xilinx-u200-xdma-201830.2-2580015_18.04.deb
Singularity> ./Xilinx_Unified_2020.1_0602_1208_Lin64.bin
Verifying archive integrity... All good.
Uncompressing Xilinx Installer...........................................................................................................
오른쪽과 같은 창이 뜹니다.
2020.2 버전이 새로 나왔다고 안내가 나오지만 여기에서는 선택하지 않고 continue를 눌러 다음 단계로 진행합니다. Next> 버튼을 눌러 다음으로 진행합니다.
유저 인증이 필요합니다.
xilinx 홈페이지 아이디 (이메일주소)와 암호를 입력해 다음 단계로 진행합니다.
동의하고 다음으로 진행.

설치 옵션을 선택합니다. 여기에서는 vitis 전체를 설치하도록 했습니다.

설치 경로를 선택하고 Next> Install 버튼을 클릭해 설치를 시작합니다.

설치까지 오랜 시간이 걸립니다. (10MB/s 기준 1시간 소요)

3. 패치 적용하기

패치가 포함된 압축 파일을 풀고 패치를 적용합니다.

xsetup을 실행해 패치를 적용합니다.

Singularity> cd /install
Singularity> tar xzf Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247.tar.gz
Singularity> ls -alh
total 11G
drwxr-xr-x  3 root  root  4.0K Jul 20 17:34 .
drwxr-xr-x 24 root  root  4.0K Jul 20 17:18 ..
-rwxr-xr-x  1 root  root  117M Jul 20 16:59 Xilinx_Unified_2020.1_0602_1208_Lin64.bin
drwxr-xr-x  8 65673 10115 4.0K Aug  6  2020 Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247
-rw-r--r--  1 root  root   11G Jul 20 16:59 Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247.tar.gz
-rw-r--r--  1 root  root   71M Jul 20 16:59 xilinx-u200-xdma-201830.2-2580015_18.04.deb
-rw-r--r--  1 root  root  541M Jul 20 16:59 xilinx-u200-xdma-201830.2-dev-2580015_18.04.deb
-rw-r--r--  1 root  root  7.8M Jul 20 16:59 xrt_202010.2.6.655_18.04-amd64-xrt.deb
Singularity> cd Xilinx_Vivado_Vitis_Update_2020.1.1_0805_2247
Singularity> ls
bin  data  lib  payload  scripts  tps  xsetup  xsetup.exe
Singularity> ./xsetup

4. 임시파일 정리하고 배포용 sif 이미지 만들기

샌드박스 이미지 내의 임시파일을 정리하고, 배포용 sif 이미지를 생성합니다.

Singularity> rm -rf /install
Singularity> exit
# **singularity build xilinx_2020.1.1_u200_ubuntu18.04.sif xilinx_2020.1.1_u200_ubuntu18.04**
INFO:    Starting build...
INFO:    Creating SIF file...
INFO:    Build complete: xilinx_2020.1.1_u200_ubuntu18.04.sif

이미지 용량이 크기 때문에 시간이 오래 걸립니다. (원본 78GByte, sif 이미지 생성 후 34GByte)

잘 되었으면 샌드박스 이미지를 삭제하면 됩니다.

실행하기

singularity를 이용해 구동할 수 있게 되었습니다.

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

$ singularity run xilinx_2020.1.1_u200_ubuntu18.04.sif
Singularity> vivado

****** Vivado v2020.1.1 (64-bit)
  **** SW Build 2960000 on Wed Aug  5 22:57:21 MDT 2020
  **** IP Build 2956692 on Thu Aug  6 01:41:30 MDT 2020
    ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.

start_gui

hw_server 나 hardware manager등을 이용해 장치를 연결하고 개발 환경을 구동할 수 있습니다.

주의점

FATAL:   container creation failed: mount error: can't mount image /proc/self/fd/8: failed to mount squashfs filesystem: invalid argument
Singularity> vivado
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
/store/sw/Xilinx/Vivado/2020.1/bin/loader: line 286: 665953 Aborted                 (core dumped) "$RDI_PROG" "$@"

Singularity> LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 vivado

****** Vivado v2020.1.1 (64-bit)
  **** SW Build 2960000 on Wed Aug  5 22:57:21 MDT 2020
  **** IP Build 2956692 on Thu Aug  6 01:41:30 MDT 2020
    ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.

start_gui

* Singularity로 Alveo를 빌드할 때 문제점

- ho-oh서버에 Alveo U200의 License파일은 /opt/xilinx/dsa폴더 속에 존재한다. 하지만 singularity를 통해 작업환경을 구축할 경우, Alveo License파일이 존재하지 않아 빌드할 수 없다.

* Vitis Serial Terminal에서의 Port 인식 문제 및 해결

- 일반 User권한으로 Vitis Serial Terminal에서 Alveo와 통신을 시도하면 권한에 의해 Port검색이 되지 않음.

- root권한으로 Vitis를 실행하거나, /dev하위의 ttyUSB폴더에 일반 User권한 부여

* Singularity 파일 실행 시 Display Error

- singularity run 실행 전 터미널에서 xhost +

- singularity run 실행 후 터미널에서 xhost + 입력 후, xclock으로 디스플레이 확인

* 구 버전 Vivado Singularity파일 생성 시 주의점 (2018.x)

- 최신 버전 Vivado(2020.x 이후 버전 확인)는 설정에서 Board File들의 위치를 지정해 줄 수 있지만, 구버전의 경우 설치 경로에 보드 파일이 존재해야함. (~/Xilinx/Vivado/2018.x/data/board/board_files)

- Singularity build 전 위 경로에 미리 Borad Files(XilinxBoardStore)를 미리 넣어 놔야 함.

참고자료

Singularity container

Vivado 2020.1 설치

우분투 리눅스 정보 및 필요 패키지 정보

기타 정보