====== Singularity를 이용해 vivado 설치하기 ======
이 문서는 2021년 8월 15일 작성되었습니다. ubuntu 18.04, vivado 2020.1버전 설치를 기준으로 합니다.
Xilinx 라이센스상 계정에 가입되어 있어야 설치 프로그램을 다운로드할 수 있습니다. 따라서 singularity 이미지 자체를 배포하는 것은 문제의 소지가 있습니다.
Alveo U200 카드 활용을 위한 내용이 포함되어 있습니다.
개요: vivado는 xilinx 개발 환경입니다. 설치할 때 특정 OS 버젼을 맞춰야 하기 때문에 실제 사용중인 서버 등에 설치할 때 까다롭습니다. 컨테이너를 이용하면 운영중인 서버에 영향 없이 사용할 수 있습니다.
컨테이너에는 여러가지 기술이 있지만, singularity는 high performance computing환경에서 많이 사용됩니다. 특히 docker와 달리 이미지를 파일 형태로 배포할 수 있고, 일반 유저 권한으로 실행할 수 있는 점이 편리합니다.
한번 이미지를 생성해 둔 다음에는 sif 파일만 들고 있으면 임의의 OS에서 동일한 리눅스 환경을 재현해 사용할 수 있습니다.
===== 설치 준비를 위한 파일 다운로드 =====
vitis, vivado 등은 xilinx 홈페이지에서 유저 아이디를 입력하고 라이센스 동의 등을 해야 다운로드를 받을 수 있습니다.
아래 링크로 들어갑니다.
* https://www.xilinx.com/products/boards-and-kits/alveo/u200.html#gettingStarted
{{ :public:docs:2021:singularity_vivado:untitled_1_.png?direct&600 |}}
아래쪽에서 Archive를 클릭하면, 과거 버전들이 보입니다. 여기에서 2020.1을 선택합니다.
{{ :public:docs:2021:singularity_vivado:untitled_2_.png?direct&400 |}}
{{ :public:docs:2021:singularity_vivado:untitled_3_.png?direct&400 |}}
정리하면 아래와 같이 선택합니다.
{{ :public:docs:2021:singularity_vivado:untitled_4_.png?direct&400 |}}
아래쪽 다운로드 가능한 것들은 받아둡니다.
{{ :public:docs:2021:singularity_vivado:untitled_5_.png?direct&400 |}}
Vitis 2020.1 버전을 다운로드 받습니다. 아래쪽 링크 Donload Vitis Software 링크 사용하거나, 바로 아래 링크를 방문합니다. 들어가면 아래 화면과 같이 나타납니다. Version에서 2020.1을 선택해 들어갑니다.
[[https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis.html]]
{{ :public:docs:2021:singularity_vivado:untitled_6_.png?direct&600 |}}
스크롤해서 내려가서 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
링크 들어가면 로그인 해야 합니다.
{{ :public:docs:2021:singularity_vivado:untitled_7_.png?direct&200 |}}
로그인 하고 나면 주소 등의 정보를 자세히 적게 되어 있고, 경우에 따라서는 별도로 동의 버튼을 클릭해야 할 수 있습니다.
{{ :public:docs:2021:singularity_vivado:untitled_8_.png?direct&400 |}}
파일들을 준비했으면 한 디렉토리에 모아둡니다. 여기에서는 /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** 하는 방법을 이용했습니다.
전체적으로 보면,
- singlularity sandbox 이미지 생성하고 필수 패키지와 드라이버 설치하기
- sandbox image를 write mode로 열어 vivado 수동 설치하기
- 임시 파일 정리하기
- sif 이미지로 정리하기
순서로 진행합니다.
==== 1. Sandbox 이미지 생성하고 필수 패키지와 드라이버 설치 ====
참고사항: ubuntu 18.04를 설치하는데, 2021년 7월 현재 기본 릴리즈는 18.04.5가 설치됩니다. 그런데 vivado 2020.1 은 18.04.4 LTS까지만 정상 설치가 진행되는 것으로 보입니다. 여기에서는 **/etc/lsb-release 파일을 고쳐 넣어 vivado 설치 프로그램을 속여 진행**합니다.
아래와 같은 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 <
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> 버튼을 눌러 다음으로 진행합니다. | {{:public:docs:2021:singularity_vivado:untitled_9_.png?direct|}} |
| 유저 인증이 필요합니다. \\ xilinx 홈페이지 아이디 (이메일주소)와 암호를 입력해 다음 단계로 진행합니다. | {{:public:docs:2021:singularity_vivado:untitled_10_.png?direct|}} |
| 동의하고 다음으로 진행.| {{:public:docs:2021:singularity_vivado:untitled_11_.png?direct|}} |
설치 옵션을 선택합니다. 여기에서는 vitis 전체를 설치하도록 했습니다.
| | {{:public:docs:2021:singularity_vivado:untitled_12_.png?direct|}} | {{:public:docs:2021:singularity_vivado:untitled_13_.png?direct|}} |
설치 경로를 선택하고 Next> Install 버튼을 클릭해 설치를 시작합니다.
| | {{:public:docs:2021:singularity_vivado:untitled_14_.png?direct|}} | {{:public:docs:2021:singularity_vivado:untitled_15_.png?direct|}} |
| | {{:public:docs:2021:singularity_vivado:untitled_16_.png?direct|}} | {{:public:docs:2021:singularity_vivado:untitled_17_.png?direct|}} |
설치까지 오랜 시간이 걸립니다. (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
| | {{:public:docs:2021:singularity_vivado:untitled_16_.png?direct|}} | {{:public:docs:2021:singularity_vivado:untitled_17_.png?direct|}} |
| | {{:public:docs:2021:singularity_vivado:untitled_18_.png?direct|}} | {{:public:docs:2021:singularity_vivado:untitled_19_.png?direct|}} |
==== 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등을 이용해 장치를 연결하고 개발 환경을 구동할 수 있습니다.
{{ :public:docs:2021:singularity_vivado:untitled_20_.png?direct&600 }}
===== 주의점 =====
* singularity version을 3.8.0 을 사용합니다. 예를 들어 singularity 홈페이지의 매뉴얼에 적혀 있는 3.0.3버전에서는 오동작하는 경우가 있습니다./
FATAL: container creation failed: mount error: can't mount image /proc/self/fd/8: failed to mount squashfs filesystem: invalid argument
* 실행시에 환경변수 설정이 필요할 수 있습니다. 위의 singularity definition file에서는 locales 패키지ᅟ 설치 후 /etc/locale.gen파일 수정 후 locale-gen 명령어를 실행해 locale추가를 해주었습니다.
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
* 소개: [[https://sylabs.io/docs]] \\ [[https://github.com/sylabs/singularity]] \\ [[https://sylabs.io/guides/3.0/user-guide/quick_start.html]]
* 컨테이너 생성: [[https://sylabs.io/guides/3.0/user-guide/build_a_container.html]]
* definition 파일 작성: [[https://sylabs.io/guides/3.0/user-guide/definition_files.html#environment]]
Vivado 2020.1 설치
* Vivado 2020.1.1 설치 정보: [[https://www.xilinx.com/support/answers/75476.html]]
우분투 리눅스 정보 및 필요 패키지 정보
* 우분투에서 버전 속이기 [[https://askubuntu.com/questions/292866/how-to-fake-ubuntu-version-number-to-applications]]
* x11 패키지 설치: [[https://askubuntu.com/questions/213678/how-to-install-x11-xorg]]
기타 정보
* locale문제로 인한 crash 해결 [[https://github.com/potree/PotreeConverter/issues/281]] \\ [[https://wiki.archlinux.org/title/Locale]] \\ [[https://bbs.archlinux.org/viewtopic.php?pid=1914212#p1914212]]