目录

  1. 简介
  2. 系统环境
  3. 安装docker
  4. 将tensorflow镜像保存到本地
  5. 配置nvidia container toolkit
  6. 配置docker中的jupyter notebook
  7. 安装sionna
  8. 小结

备注

2026.4.25:sionna 2.X 仅支持 pytorch,tensorflow 已经放弃
2025.7.19:推荐使用wsl2,ubuntu经常不稳定,而且conda还有点问题,虚拟环境无法完全隔离。用python创建venv虚拟环境,终端输入pip install tensorflow[and-cuda]安装支持gpu的最新稳定版本,不需要安装cuda相关的东西,目前2.19能够正常使用。
2025.7.7: 选择tensorflow 2.15版本。 tensorflow 2.17使用keras3,但是keras3不支持complex32;不选择2.18和2.19是因为在版本兼容方面都推荐cuda12.5,但是官方的镜像使用cuda12.3,在镜像中nvidia-smi正常,但是tensorflow找不到gpu(我脑袋上就是一个大写的问号,啊?)

1. 简介

sionna是英伟达推出的用于将ai应用到通信系统的软件包,基于tensorflow,如果是做通信+ai方向的话这个软件包可能是目前最好的工具。sionna包括视线追踪、物理层、系统层的仿真,而且官网有jetson orin开发板和usrp联合搭建的仿真平台资料,貌似可以学习一下。sionna相关的介绍可以看这里
tensorflow曾经是一个很流行的深度学习软件包,但是现在已经被pytorch远远甩在后面了(如果不是为了sionna我才不配tensorflow!),就我目前的了解,tensorflow存在的问题:1. 从1.x和2.x兼容性极差。2. 从2.11开始,tensorflow不支持在win上直接调用gpu。3. 官网好像很久都没有更新了,必须到github上才能找到官方的教程。4. 配置极其麻烦,和pytorch形成了鲜明的对比。对面pytorch直接从用官网的pip语句就可以了,无需单独下载CUDA和cuDNN;如果是tensorflow还需要单独下载CUDA和cuDNN,所以我选择直接使用官方提供的docker镜像。
2025年7月,sionna建议使用tensorflow2.14-2.19,由于我的显卡驱动是570版本,支持的最高cuda是12.8,所以选择tensorflow2.15,cuda是12.3。
默认已经配置好ubuntu22和显卡驱动,接下来需要做的事情:

  • 安装docker
  • 将官方的tensorflow镜像保存到本地
  • 配置nvidia container toolkit
  • 配置docker中的jupyter notebook,使宿主机能够访问docker中的jupyter notebook
  • 安装sionna

2. 系统环境

cpu:12600kf
显卡:4060ti 16g
系统:ubuntu22长期支持版本
硬盘:固态,1TB
pip清华源:https://pypi.tuna.tsinghua.edu.cn/simple

3. 安装docker

docker安装
这部分有点久远,具体操作记不清了,当时应该没遇到什么问题。等回头我再用一个新硬盘复现一下,先挖个坑。
成功安装docker后需要更换docker镜像源,具体可以参考这个链接,使用默认的那个轩辕镜像源可以。也可以注册自己的阿里云镜像源,官方教程
命令行输入docker --version查看是否安装成功。

4. 将tensorflow镜像保存到本地

这一步在宿主机完成
官方教程
镜像获取地址
首先是在镜像源地址中找到对应版本的镜像,镜像一般分为cpu和gpu、有无jupyter,我选择的是tensorflow 2.15 gpu jupyter版本,对应的命令如下

docker pull tensorflow/tensorflow:2.15.0-gpu-jupyter

这里需要重点强调一下,使用官方镜像的好处是镜像中的配置基本是正确的,而且添加国内镜像源比较方便,下载到本地稍微修改一下就可以用。但是和正常使用宿主机会有一些区别,比如说在已有的镜像基础上安装新的软件包之后需要使用commit保存,不然退出镜像再进入就会丢失。镜像中的jupyter notebook无法直接使用,需要修改一些配置信息并且在每一次开启镜像的时候完成端口映射。
如果是手动下载tensorflow、cuda和cuDNN,过程中某些语句使用国内镜像源加速不太方便,导致预估的下载时间长达2天。
在虚拟机中安装新的软件或者生成新的数据,在退出之前一定要保存!一定要保存!一定要保存!
列出所有镜像

docker images

假设输出的例子为

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
old_name            v1.0      abcdef123456   2 weeks ago    1.2GB

修改镜像的标签

这个是命令的公式
docker tag <原镜像ID或名称:原标签> <新名称:新标签>  

这个是命令的示例
docker tag old_name:v1.0 new_name:v2.0        

再次输入docker images,输出为

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
old_name            v1.0      abcdef123456   2 weeks ago    1.2GB
new_name            v2.0      abcdef123456   2 weeks ago    1.2GB

删除旧标签

这个是命令的公式
docker rmi <旧名称:旧标签>

这个是命令的示例
docker rmi old_name:v1.0

5. 配置nvidia container toolkit

这一步在宿主机完成
nvidia-container-toolkit
官方安装和配置教程
参考官方安装和配置教程,首先使用apt安装,然后对容器进行配置

  • 安装
    安装
  • 配置
    配置
    开启虚拟机
docker run -p 8888:8888 -it --gpus all -v /home/a:/tf/a sionna:v1 bash
  • run: 运行docker的指令
  • -p: 端口映射,8888:8888中前面的8888是宿主机的端口,后面的8888是虚拟机的端口
  • -it: i代表交互模式,t代表伪终端
  • –gpus all: 可以使用宿主机的全部gpu
  • -v /home/a:/tf/a: -v是磁盘挂载,/home/a是宿主机的一个目录,/tf/a是虚拟机挂载的目标目录
  • sionna:v1: 镜像的名称和版本号,根据docker images确定
  • bash: 启动命令行

测试虚拟机是否能够正常使用gpu

nvidia-smi

使用下面的命令测试tensorflow是否能够正常使用gpu,如果返回一个空数组,说明tensorflow安装有问题,可能需要更换其他版本

python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

6. 配置docker中的jupyter notebook

docker内的jupyter notebook配置
首先开启虚拟机

docker run -p 8888:8888 -it --gpus all -v /home/a:/tf/a sionna:v1 bash

进入虚拟机之后,安装vim

更新源
apt-get update

安装vim
apt-get install vim

如果没有jupyter notebook,执行安装命令

pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 生成配置文件

    jupyter-notebook --generate-config
    

    这一步会输出jupyter_notebook_config.py文件的位置,记录下来,我这里是/root/.jupyter/jupyter_notebook_config.py

  • 打开ipython生成密钥

    第一步,打开ipython
    ipython
    
    第二步,生成密钥
    from jupyter_server.auth import passwd
    passwd()
    

    记录生成的密钥

  • 修改配置
    用vim修改配置文件

    vim /root/.jupyter/jupyter_notebook_config.py
    

    找到空白位置,按i进入输入模式,完成修改后按esc退出输入模式,然后输入:wq保存并退出

    c.NotebookApp.ip = '*'                      # 允许任意本地服务器的ip访问;不需要修改;
    c.NotebookApp.port = 8888                     # 用于访问的端口,这里与前面Container的8888端口要一致,如`-p 8888:8888`,这里填`8888`;需要修改;
    c.NotebookApp.open_browser = False          # 不自动打开浏览器;不需要修改;
    c.NotebookApp.allow_remote_access = True    #允许远程访问;不需要修改;
    c.NotebookApp.password = u'64c28fe637:dedb448e6fa6eae5244044d2dac9ce9cc334f919'   # 设置登录密码,把前面的密钥替换这里密钥;需要修改;
    
  • 启动jupyter notebook并使用浏览器查看代码

    jupyter notebook --allow-root   
    

    命令行会输出用于访问的地址,例如http://127.0.0.1:8888/tree。在浏览器中输入127.0.0.1:8888即可正常使用jupyter notebook。

如果到这里退出不要忘记保存虚拟机!!!

这是命令的公式
docker commit <容器ID或名称> 新镜像名:标签

这是命令的示例
docker commit my_container my_ubuntu:latest

7. 安装sionna

官方教程
安装sionna

pip install sionna -i https://pypi.tuna.tsinghua.edu.cn/simple

将官方的仓库克隆下来

git clone --recursive https://github.com/NVlabs/sionna

命令行进入克隆的文件夹中,配置测试文件

pip install '.[test]' -i https://pypi.tuna.tsinghua.edu.cn/simple

进入test文件夹中,运行pytest命令。我目前的测试结果还是有一些错误和失败,但是暂时不影响使用,如果以后有新的发现我会更新这个帖子。
到这里基本就安装完成了,可以跑一跑官方的例程,看看gpu是否被正常使用。

8. 小结

反反复复花了两三天配置环境,累死了。
接下来就是学习深度学习在通信中的应用!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐