FPGA_as_a_Service仓库分为四个子仓库:Xilinx Base Runtime(预装了Xilinx运行时和setup、flash Alveo加速卡的Docker镜像)、Containerization(为多种云供应商提供脚本build Docker镜像)、k8s-fpga-device-plugin(在k8s集群中运行FPGA容器,节点部署发现FPGA Daemonset)、XRM(Xilinx FPGA硬件资源管理)


Xilinx Base Runtime - Xilinx Runtime Base Image Deployment Docker Solution

Docker是一组平台即服务(PaaS)产品,它们使用操作系统级虚拟化来交付Xilinx_Base_Runtimed容器。 容器使开发人员可以将应用程序所需的所有部分(如库和其他依赖项)打包在一起,并将它们全部打包为一个软件包。 有关更多Docker信息,请参阅Docker文档。

对于运行FPGA应用程序的docker容器,有几个前提条件:

  • 在服务器上安装Xilinx Alveo FPGA硬件(Alveo U200,Alveo U250或Alveo U280)。
  • 在主机上安装XRT(Xilinx运行时)(此存储库中提供的脚本)。
  • 执行主机上的FPGA的Flash Shell(也包含在此版本库的脚本中)。
  • 特权模式运行docker FPGA容器或同时映射管理设备和用户设备*。
    默认情况下,Docker容器是“非特权”的,例如,不能在Docker容器内运行Docker守护程序。这是因为默认情况下,不允许容器访问任何设备,但是授予“特权”容器访问所有设备的权限(请参阅cgroups设备上的文档)。如果要限制对特定设备的访问,可以使用–device标志。它允许您指定一个或多个在容器内可访问的设备。对于Xilinx Alveo FPGA,它具有管理功能和用户功能。 Docker将把这两个功能用作映射的两个设备。

用户可以做一下操作:Setup Host (install driver and flash the cards)、Run Base Docker Image、Customize Docker Image for new Application。

Setup Host

为了在主机上安装XRT和平台并刷新加速卡,提供了带有两个参数(平台和版本)的单个命令(请参阅host_setup.sh)。
Installation Example
Run host_setup.sh as root. 使用root用户运行host_setup.sh
Clone repository from Xilinx GitHub 从Xilinx GitHub克隆仓库 root@machine:~$ git clone https://github.com/Xilinx/Xilinx_Base_Runtime.git
Go to Xilinx_Base_Runtime directory root@machine:~$ cd Xilinx_Base_Runtime
According to demand, choose deployment shell base on version.

#  ./host_setup.sh     --version <version>
#  ./host_setup.sh      -v       <version>
#  <version>      : 2018.3 / 2019.1 / 2019.2 / 2020.1
root@machine:~$ ./host_setup.sh -v 2019.1

Wait until installation completed. During the period you may need press [Y] to continue. Please Note: If you choose flashing FPGA, you need to cold reboot local machine after installation completed to load the new image on FPGA. 等待安装完成。 在此期间,您可能需要按[Y]才能继续。 请注意:如果选择闪存FPGA,则安装完成后需要冷重启本地计算机,以将新映像加载到FPGA上。

Run Base Docker Image

Docker是一组平台即服务(PaaS)产品,它们使用操作系统级虚拟化来交付Xilinx_Base_Runtimed容器。 在容器内部,您可以具有隔离的运行时环境,该环境具有预安装的XRT(Xilinx Runtime)和依赖项。但是,容器无法访问主机内核。 因此,您需要在主机上安装相同版本的XRT作为驱动程序,并在容器内使用XRT作为运行时。 并且应使用指定的Shell刷新FPGA。 您可以从Xilinx产品页面找到所有安装软件包,或通过该项目进行安装。 请参阅设置主机。
Runtime Example
Clone repository from Xilinx GitHub user@machine:~$ git clone https://github.com/Xilinx/Xilinx_Base_Runtime.git
Go to Xilinx_Base_Runtime directory user@machine:~$ cd Xilinx_Base_Runtime
Run run.sh with corresponding arguments: xrt version and os version

#  ./run.sh     --version <version> --os-version <os-version>
#  ./run.sh      -v       <version>  -o          <os-version>
#  <version>      : 2018.3 / 2019.1 / 2019.2 /2020.1
#  <os-version>   : ubuntu-18.04 / ubuntu-16.04 / centos
user@machine:~/Xilinx_Base_Runtime$ ./run.sh -v 2019.1 -o ubuntu-18.04

Inside docker container, run xbutil list or xbutil dmatest for listing cards or testing dma. Or copy your own application and xclbin files to container and run for test. 在docker容器中,运行xbutil list或xbutil dmatest来列出卡或测试dma。 或将您自己的应用程序和xclbin文件复制到容器中并运行以进行测试。
root@fc33db3f6ed6:/$ /opt/xilinx/xrt/bin/xbutil list
root@fc33db3f6ed6:/$ /opt/xilinx/xrt/bin/xbutil dmatest

Build docker application by using base image

该项目提供的所有docker映像都可以用作构建自己的docker应用程序的基础映像,因为它们都安装了XRT和依赖项。 这是Dockerfile的一个简单示例。

# Choose one of images as base image based on platform, version and OS version
FROM xilinx/xilinx_runtime_base:alveo-2019.2-ubuntu-18.04# Configure environment what your application needs, for example
apt-get install [dependencies]# Copy your application and xclbin files
COPY [application_file] [path_of_application_file]
COPY [xclbin_file] [path_of_xclbin_file]

Then you can use docker build -t [tag] -f [Dockerfile] to build your own docker application.

FAQ
如果XRT已安装在容器内,为什么要在主机上安装XRT?
XRT包含多种内容:驱动程序,运行时,实用程序等。Docker容器无法直接访问主机内核。 因此,容器内的XRT是运行时,主机上的XRT与内核作为驱动程序对话。 目前,XRT不支持向后兼容。 您需要确保主机XRT和容器XRT的版本应该相同。

我不想在特权模式下运行docker。如何将management function and user function管理功能和用户功能作为设备映射到Docker容器
您可以使用docker run --device标志。管理功能的路径为/dev/xclmgm[num_mgmt],用户功能的路径为/dev/dri/renderD[num_user]。对于num_mgmt,运行/ opt / xilinx / xrt / bin / xbmgmt扫描,您将看到类似以下内容的东西:[0] mgmt:[03:00.1]:0x5000:0x000e:[xclmgmt:2.2.2173,ff6624c6d72c6ca68d6b123c9d76e49e55c09097:769数字[0]是FPGA的索引(您可能安装了多个卡),最后一个数字:769是num_mgmt对于num_user,请运行/ opt / xilinx / xrt / bin / xbutil scan,您将看到类似以下内容:[0 ]用户:[30:00.0]:0x5001:0xe000:[xocl:2.2.2173,ff6624c6d72c6ca68d6b123c9d76e49e55c09097:128]请确保索引与mgmt相同,最后一个数字:128为num_user找出num_mgmt和num_user之后,您可以像这样运行docker:docker run --rm -it --device = / dev / xclmgmt769:/ dev / xclmgmt769 --device = / dev / dri / renderD128:/ dev / dri / renderD128 xilinx / xsds:alveo-u200- 2019-1-ubuntu-1604

OS版本对docker映像意味着什么?
Docker可以提供OS级虚拟化。 您可以在Ubuntu服务器上运行基于CentOS的Docker容器。 它为客户构建应用程序提供了便利,而无需考虑不同的OS版本。

如果我在主机上安装了多功能FPGA卡,那么在Docker容器中可以访问哪些卡?
他们全部。 run.sh脚本将扫描所有FPGA设备并将它们映射到docker容器。 如果要限制特定的卡,请参阅问题2。 请注意,映射设备并不意味着该容器专有。

注意:此Xilinx_Base_Runtime以Docker映像(“映像”)的形式提供给您。使用此映像,即表示您代表您自己和您的雇主(如果适用)受此信息以及适用于该映像的Xilinx_Base_Runtimede和此映像(如果适用)的Xilinx_Base_Runtimeributing的许可协议的约束,但需要运行此映像映像,并在执行Docker构建实用程序脚本(“脚本”)后从Internet下载。如果您选择通过输入必要的命令来执行脚本,则您承认从Image或从Internet上安装的各种Xilinx_Base_Runtimed均已安装在Image中,并且您同意由您独自负责查看和遵守以下条款:管理此类Xilinx_Base_Runtime Docker可执行文件并安装到Image中的许可协议。 Xilinx_Base_Runtimets可以在Image下载站点的“ LICENSE”文件中,Xilinx_Base_Runtimehe Image的源代码中查看,也可以使用(i)操作系统Xilinx_Base_Runtimets(主要社区开源)查看。项目网页,以及(ii)Xilinx_Base_Runtime互联网,位于原始网页提供给您的URL,可以从其中下载Xilinx_Base_Runtime。如果您不同意,则不应“单击”接受通知,也不应输入脚本命令,也不应以其他方式访问,下载,安装或使用映像。
免责声明:此图像按“原样”提供,并且XILINX不作任何明示,暗示或法定的担保和条件,包括但不限于对任何特定目的的适销性,非侵权性或适用性的担保。 Xilinx对与该图像相关,由其产生或与之相关的任何种类或性质的任何损失或损害(包括合同或侵权行为,包括过失,或根据任何其他责任理论)概不负责。直接,间接,特殊,偶发或后果性损失或损害(包括由于第三方提起的任何诉讼而遭受的数据,利润,商誉或任何类型的损失或损害),即使此类损害或损失为可以合理预见或告知Xilinx这样做的可能性。

k8s-fpga-device-plugin

用于Kubernetes的Xilinx FPGA设备插件是部署在Kubernetes(k8s)集群上的Daemonset,它使您能够:发现插入集群的每个节点中的FPGA,并公开有关FPGA的信息,例如FPGA的数量,Shell(目标平台)类型等;在k8s集群中运行FPGA可访问的容器
如果您已经拥有docker和kubernetes环境,则可以按照快速入门在您自己的集群上测试k8s-fpga-device-plugin。 如果要构建docker,kuberetes集群环境并从一开始就测试k8s-fpga-device-plugin,可以查看完整教程。
有关k8s-fpga-device-plugin,Docker和Kubernetes的详细信息,您可以使用以下链接:

Detailed Info Description
Kubernetes device plugin Kubernetes community documentation about Kubernetes plugin
AWS Kubernetes FPGA Plugin Install and test k8s-fpga-device-plugin on AWS FPGA
Kubernetes Docker tutorial Build docker image and test with k8s-fpga-device-plugin
Quick Start Quick start on how to install and test k8s-fpga-device-plugin
K8S FPGA Device Plugin Full tutorial Step by step tutorial starts from install docker and Kubernetes cluster
FAQ Frequently asked questions

先决条件
所有FPGA都具有已经刷新的Shell(目标平台)。
在插入了FPGA的所有工作程序节点上安装XRT(版本不早于2018.3)
k8s中的容器运行时是docker
k8s版本> = 1.17(所有测试已在版本1.17上运行。旧版本可能会或可能无法工作)

github地址:https://github.com/Xilinx/FPGA_as_a_Service
https://github.com/Xilinx/Xilinx_Base_Runtime

FPGA云原生 Xilinx FPGA_as_a_Service 概述相关推荐

  1. FPGA云原生 Mailbox通信

    Mailbox Subdevice Driver 这是添加到现有xclmgmt/xocl驱动程序中的邮箱子设备驱动程序,以便用户pf和mgmt pf可以向/从对等方发送和接收任意长度的消息. 该驱动程 ...

  2. 福利!百度免费开放内部云原生精品课程

    近年来,云原生的关注度居高不下,全世界的开发者都对由此而兴起的一众技术十分追捧,中国的开发者们也经历了从关注"云原生概念"到关注"云原生落地实践"的转变.在企业 ...

  3. 【新书速递】应用上云成必然趋势,“安全左移”是云原生安全的必经之路?...

    云计算一经走向市场,就迅速呈现出强大的生命力.随着大数据时代的到来,云计算成为大数据的承载平台,"云计算+大数据+人工智能"成为新基建的核心.云计算也因大数据.人工智能的不断发展而 ...

  4. 【重识云原生】第六章容器6.3.5节——Controller Manager概述

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  5. 【重识云原生】第六章容器基础6.4.5.1节——Deployment概述

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  6. 云原生技术和架构概述

    2014年,谷歌开源了一个主要用于容器编排的Borg内部项目.由于没有机构来管理这个项目,谷歌就与Linux基金会联合创建了旨在鼓励Kubernetes和其他云原生解决方案的开发和协作的云原生计算基金 ...

  7. Go语言云原生与微服务(二)微服务概述

    Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者.专注于做最通俗易懂的计算机基础知识类公众号.每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Do ...

  8. [云原生专题-60]:Kubesphere云治理-DevOps-自动化开发与自动化上云部署流程概述

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  9. 云安全|云原生安全概述

    本系列博客的内容均来源于对**"云原生安全:攻防实现与体系构建"**这本书籍的学习归纳. 1.1 云原生的含义 ​ 云计算的上半场基本已经结束,很多企业已经利用开源的或者商业的Ia ...

最新文章

  1. 8 种最坑的 SQL 错误用法,你有没有踩过坑?
  2. 第8部分 管理磁盘存储
  3. Java虚拟机 —— 运行时数据区
  4. 如何反复读取同一个 InputStream 对象
  5. 凤凰os linux界面,让deepin linux系统与凤凰os共用个人目录的方法
  6. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
  7. Linux 获取grep前后几行
  8. iOS开发:remove reference与move to trash的区别
  9. 在苹果Mac上格式化USB闪存驱动器
  10. jquery Map转JSON
  11. java零基础自学首选黑马程序员Java入门教程笔记01
  12. 在Debian上安装FlashPlayer10
  13. OGNL表达式学习笔记
  14. python微信爬取教程_python爬取微信文章方法
  15. AI 进军考古学!科学家用深度学习算法发现了近 100 万年前人类用火的证据,登上PNAS...
  16. 基于JAVA影楼网站计算机毕业设计源码+系统+数据库+lw文档+部署
  17. Direct3D 12简介
  18. buuctf_Misc-喵喵喵
  19. CPU不得不知的秘密
  20. <快捷键>Pycharm快速创建推导公式

热门文章

  1. 细说JVM系列:JVM存在的目的和意义是什么?
  2. 数值分析中对有效数字的定义
  3. Matlab 基础04 - 冒号Colon operator “:”的使用和复杂应用详析
  4. 主成分分析旋转矩阵MATLAB实现,R语言高维数据的主成分pca、t-SNE算法降维与可视化分析案例报告...
  5. stm32 定时器输出PWM原理及工作原理+控制舵机
  6. Booth编码以及运算实例
  7. Tmp112数字温度传感器
  8. PHP实现 网页图片上传
  9. 【MATLAB】手把手教你安装MATLAB R2021b(内含安装包)
  10. 【千锋】网络安全学习笔记(三)