目录
- 一、内网穿透
-
- 第一步:在公司电脑上安装 WSL(Linux 系统)
- 第二步:在公司电脑上开启 SSH(允许家里远程登录)
- 第三步:在两台电脑都安装 Tailscale(打通网络)
-
- 先在公司电脑安装:
- 再在家里电脑安装:
- 查看公司电脑的 Tailscale 地址:
- 第四步:在家里电脑生成“钥匙”(安全登录用)
-
- 操作步骤(在家里电脑做):
- 找到公钥文件(id_rsa.pub):
- 把“钥匙”交给公司电脑:
- 第五步:在家里连接公司电脑,进入 Linux
-
- 操作步骤(在家里电脑):
- 第六步:提示输入密码解决方案
- 二、配置wsl训练环境
-
-
- 步骤 1:在 WSL 中安装 Miniconda(Python 环境管理器)
- 步骤 2:创建专门的深度学习环境
- 步骤3:配置镜像源
- 步骤 4:安装 PyTorch 和常用库
-
- 三、配置家用电脑开发环
-
- 准备阶段:在家用电脑上安装必要软件
- 第一次建立SSH连接(关键步骤)
- 四、针对WSL系统的内网穿透
-
-
- 1. 第一步:在 WSL 中安装 Tailscale 客户端
- 2. 第二步:启动 Tailscale 并登录账号
- 3. 第三步:获取 WSL 的 Tailscale IP 并测试
- 4. 为 WSL 配置 SSH 公钥登录
-
- (1)在 WSL 中创建 `.ssh` 文件夹和授权文件
- (2)将家里的公钥添加到 WSL
- (3)确保 WSL 的 SSH 服务已启用并运行
- 总结:两个系统,两套配置
- 5. 最终测试:从家里的电脑连接 WSL
- 6. 安装速度太慢怎么办?
-
- (1)清理缓存并重新安装
- (2)手动下载.deb包安装
- 7.其他
-
- 五、在VS Code中操作远程文件
-
- 建立ssh连接
-
- 如何使用这个配置
- 重要提醒:WSL的SSH服务
- 远程操作
一、内网穿透
整体流程概览(共 5 步)
第一步:在公司电脑上安装 WSL(Linux 系统)
WSL 是微软官方提供的“在 Windows 里运行 Linux”的工具。
点击左下角「开始」按钮 → 输入 PowerShell
右键「Windows PowerShell」 → 选择 “以管理员身份运行”
- 会弹出一个黑色窗口,标题是 “Windows PowerShell(管理员)”
在黑色窗口里复制粘贴下面这行命令(直接 Ctrl+V 可能不行,右键选择“粘贴”):
wsl —install –d Ubuntu-22.04
- 按回车(Enter)执行
你会看到屏幕显示:
正在安装 Ubuntu-22.04…
这可能需要几分钟时间。
- 电脑会自动下载并安装 Linux 系统(约 1–2 GB)
安装完成后,电脑会提示你重启
- 点击“立即重启”或稍后手动重启
重启后,第一次启动 Ubuntu 时:
- 会弹出一个叫 “Ubuntu-22.04” 的小窗口(黑色背景)
- 它会问你:Enter new UNIX username:
👉 输入一个英文用户名(比如 xiaoming,不能有空格、中文、特殊符号,不能有大写字母) 👉 按回车New password:
👉 输入一个密码(比如 123456,输的时候看不到字符,正常!) 👉 按回车Retype new password:
👉 再次输入同样密码,按回车
看到 $ 符号就说明成功了!
- 比如:xiaoming@DESKTOP-XXXXXX:~$
- 你可以关掉这个窗口,以后再用
第二步:在公司电脑上开启 SSH(允许家里远程登录)
再次以管理员身份打开 PowerShell(同上:开始菜单 → PowerShell → 右键 → 管理员)
依次执行下面三行命令(每行输完按回车):
Add-WindowsCapability –Online –Name OpenSSH.Server~~~~0.0.1.0
✅ 成功后会显示“已成功添加功能”
Start-Service sshd
(没报错就是成功)
Set-Service –Name sshd –StartupType 'Automatic'
(没报错就是成功)
- 按 Win + R 键,输入 services.msc 回车
- 在服务列表里找到 “OpenSSH SSH Server”
- 看它的“状态”是不是“正在运行”,“启动类型”是不是“自动”
- 如果不是,右键 → 属性 → 启动类型选“自动” → 应用 → 启动
✅ 第二步完成! 公司电脑现在可以被远程登录了。
第三步:在两台电脑都安装 Tailscale(打通网络)
Tailscale 能让家里电脑“看见”公司电脑,就像它们在同一个 WiFi 下。
先在公司电脑安装:
稍后家里电脑也要登录同一个账号。
再在家里电脑安装:
查看公司电脑的 Tailscale 地址:
- 比如复制到的是:100.123.45.67
这个 IP 就是你家里连接公司电脑要用的地址!
✅ 第三步完成! 两台电脑现在通过 Tailscale 连在一起了。
第四步:在家里电脑生成“钥匙”(安全登录用)
我们用“钥匙”代替密码,更安全也更方便。
操作步骤(在家里电脑做):
按 Win + R,输入 cmd 回车(打开命令提示符)
在黑色窗口里输入:
ssh-keygen -t rsa -b 4096
- 按回车
它会问:
Enter file in which to save the key (C:\\Users\\你的名字/.ssh/id_rsa):
👉 直接按回车(用默认位置)
接着问:
Enter passphrase (empty for no passphrase):
👉 直接按回车(不要设密码,否则每次都要输)
再按一次回车确认
你会看到一堆图案(像 ASCII 艺术),最后显示:
Your public key has been saved to C:\\Users\\你的名字\\.ssh\\id_rsa.pub
找到公钥文件(id_rsa.pub):
打开文件资源管理器
地址栏输入:
%USERPROFILE%\\.ssh
- 按回车,会打开一个文件夹
里面有个文件叫 id_rsa.pub → 右键它 → “打开方式” → 用记事本打开
全选内容(Ctrl+A)→ 复制(Ctrl+C)
- 内容看起来像:ssh-rsa AAAAB3NzaC1yc2E…(很长一串)… yourname@DESKTOP-XXXX
把“钥匙”交给公司电脑:
回到公司电脑
打开文件资源管理器,地址栏输入:
%USERPROFILE%
- 按回车,进入你的用户文件夹(比如 C:\\Users\\xiaoming)
查看 → 勾选“隐藏的项目”(顶部菜单栏)
- 这样才能看到 .ssh 文件夹
如果没有 .ssh 文件夹:
- 右键空白处 → 新建 → 文件夹 → 名字输入 .ssh(注意前面有个点!)
进入 .ssh 文件夹 → 右键 → 新建 → 文本文档
- 把文件名改成 authorized_keys(去掉 .txt 后缀!)
- 如果提示“更改扩展名可能不可用”,点“是”
用记事本打开 authorized_keys
- 把刚才从家里复制的那整行内容粘贴进去
- 保存(Ctrl+S)
✅ 第四步完成! 家里电脑现在可以用“钥匙”无密码登录公司电脑了。
第五步:在家里连接公司电脑,进入 Linux
操作步骤(在家里电脑):
按 Win + R,输入 cmd 回车
输入以下命令(把 100.123.45.67 替换成你之前复制的 Tailscale IP):
ssh 你的Windows用户名@100.123.45.67
- 比如你的 Windows 用户名是 xiaoming,IP 是 100.88.99.100,就输:ssh xiaoming@100.88.99.100
终端内输 exit 或按 Ctrl+D即可断开。
第一次连接会问:
The authenticity of host '…' can't be established.
ECDSA key fingerprint is SHA256:xxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
👉 输入 yes 并回车
如果配置正确,不会让你输密码!(如果提示输密码看下一步)
- 直接就进入了公司电脑的命令行,看到:xiaoming@DESKTOP-XXXXXX:~$
输入 wsl 并回车,进入 Linux:
wsl
- 你会看到:xiaoming@DESKTOP-XXXXXX:~$
(但这是 Linux 的提示符!)
试试看 GPU 是否可用:
nvidia-smi
- 如果看到显卡信息(型号、显存、温度等),说明 GPU 可用!
第六步:提示输入密码解决方案
一开始先跟着AI做了一些权限设置,但最关键的原因在于 在 sshd_config 中定义了两个不同的 AuthorizedKeysFile 路径,这会干扰 SSH 查找公钥。
解决方案(在公司电脑操作)
第一步:修改 SSH 配置文件
第二步:修改关键配置行
在记事本中,找到并修改以下几行:
修改前:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
修改为:只使用用户目录的公钥
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# 注释掉或删除下面那行
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
第三步:应用配置并重启服务
保存配置文件后,执行:
# 重启SSH服务
Restart-Service sshd
# 验证服务状态
Get-Service sshd
第四步:测试连接
回到家里电脑,尝试连接:
ssh -v lenovo@100.123.45.678
二、配置wsl训练环境
步骤 1:在 WSL 中安装 Miniconda(Python 环境管理器)
在 WSL 终端(你当前的 wsl 会话)中执行:
# 1. 下载Miniconda安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 2. 运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh
# 你会看到:
# ➤ 显示许可证协议(按空格翻页)
# ➤ 提示 "Do you accept the license terms? [yes|no]"
# 输入:yes 回车
# 3. 选择安装位置
# ➤ 提示 "Miniconda3 will now be installed into this location:"
# 直接按回车使用默认位置:/home/你的用户名/miniconda3
# 4. 初始化Conda
# ➤ 提示 "Do you wish the installer to initialize Miniconda3?"
# 输入:yes 回车
# 5. 使配置生效
source ~/.bashrc
完成后你会看到:命令提示符前出现 (base),表示已激活 Conda 基础环境。
步骤 2:创建专门的深度学习环境
# 1. 创建新环境(命名为dl,Python 3.10)
conda create -n rllab python=3.10 -y
# 2. 激活环境
conda activate rllab
# 你会看到:(base) 变成 (rllab)
第一次创建可能会有接受anaconda服务条款的操作,按提示操作即可。
步骤3:配置镜像源
关于conda和pip的使用优先级见 安装库是优先用conda还是pip。
conda 镜像配置(在base)
# 1. 备份原配置
conda config –show channels
# 2. 添加清华镜像(替换默认源)
conda config –remove-key channels
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config –set show_channel_urls yes
# 3. 可选:添加北京外国语镜像
conda config –add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/
# 4. 验证配置
conda config –show channels
pip 镜像配置(在任何环境均可)
# 1. 创建pip配置文件
mkdir -p ~/.pip
# 2. 配置清华pip镜像
cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
extra-index-url =
https://mirrors.aliyun.com/pypi/simple/
https://pypi.org/simple
trusted-host =
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
pypi.org
timeout = 120
EOF
# 3. 验证
pip config list
步骤 4:安装 PyTorch 和常用库
# 确保在rllab环境
conda activate rllab
# 看到:(rllab) gonglab@hzh25:~$
# 安装基础科学库(conda,用清华镜像)
conda install numpy pandas matplotlib scipy jupyter ipython -y
# 安装PyTorch(根据你的CUDA版本,前面运行nvidia-smi的时候已经显示了)
# CUDA 12.x:
pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu121
# 或CUDA 11.8:
pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118
三、配置家用电脑开发环
准备阶段:在家用电脑上安装必要软件
第1步:安装VS Code 第2步:安装Remote-SSH扩展 第3步:确认Tailscale已连接
第一次建立SSH连接(关键步骤)
第4步:在VS Code中启动连接
你会看到顶部弹出输入框:
Enter SSH connection command (e.g. user@host):
第5步:输入连接命令 在这里输入(替换为你的实际信息):
lenovo@100.123.45.678
- lenovo:你的Windows用户名(公司电脑的)
- 100.123.45.678:你的Tailscale IP(公司电脑的)
按回车后:
第6步:连接主机
第一次连接的重要提示:
第7步:处理第一次连接的安全提示 你会看到弹窗:
The host's authenticity can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting?
这是正常的安全警告,因为第一次连接这台机器。
操作:
第8步:选择平台类型 接下来可能看到(可能没有这步):
Select the platform of the remote host:
1. Linux
2. macOS
3. Windows
如果到目前为止都是按照前面的步骤做的,那选择Linux可能会报错,因为前面最一开始内网穿透其实是针对Windows系统配置的。但实际上我们最终需要的是Linux,因为我们要连接WSL。但是由于针对WSL的内网穿透要稍微麻烦点,所以把这一步放在后面。 这里先暂时选Windows。
第9步:输入密码(第一次需要) 重要:这是唯一一次需要输密码!
你会看到顶部弹窗:
Enter password for lenovo@100.123.45.678:
输入:你的Windows登录密码(公司电脑的密码)
注意:
- 输入时看不到字符,正常!
- 输完直接按回车
- 如果密码错误,会重新提示
第10步:等待连接完成 VS Code会:
连接成功标志:
四、针对WSL系统的内网穿透
前面在公司电脑上所做的配置实际上是针对Windows系统所做的内网穿透,因此还并不能使用该电脑上的WSL系统。 针对WSL系统需要单独再做一套内网穿透。
1. 第一步:在 WSL 中安装 Tailscale 客户端
操作:在 WSL 终端中,逐行复制粘贴以下命令并执行。
# 1. 导入Tailscale的GPG密钥和软件源(确保安装包来源可信)
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | sudo apt-key add –
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.list | sudo tee /etc/apt/sources.list.d/tailscale.list
执行后你应该会看到:
- 第一行命令执行后通常没有输出,或显示 OK。
- 第二行命令执行后会显示添加的软件源内容,例如:deb https://pkgs.tailscale.com/stable/ubuntu focal main
接着执行:
# 2. 更新软件包列表并安装Tailscale
sudo apt-get update
sudo apt-get install tailscale -y
执行后你应该会看到:
- update 命令会滚动刷新软件源列表。
- install 命令会显示安装进度,最后出现 Setting up tailscale (x.x.x) … 表示安装成功。
2. 第二步:启动 Tailscale 并登录账号
操作:继续在 WSL 终端中执行。
# 3. 启动Tailscale服务
sudo systemctl start tailscaled
执行后通常没有输出,表示启动成功。如果遇到 Failed to start tailscaled.service,不用慌,我们有一个备用方案,稍后解决。
接下来是关键步骤:登录。请执行:
# 4. 登录你的Tailscale账号(必须和Windows上的是同一个!)
sudo tailscale up
执行后你会看到: 终端会显示一个超链接,格式如下:
To authenticate, visit:
https://login.tailscale.com/a/xxxxxxxxxx
批准成功后,WSL 终端里会自动显示连接成功信息,例如:
Success.
3. 第三步:获取 WSL 的 Tailscale IP 并测试
操作:登录成功后,在 WSL 终端继续执行。
# 5. 查看WSL的Tailscale专属IP地址
tailscale ip
执行后你会看到: 会显示 1 个或 2 个 IP 地址,一个是 100.x.x.x (IPv 4),一个是 fd7a:xxxx:xxxx::x (IPv 6)。 请记下 100 开头的这个 IPv 4 地址,例如 100.123.45.789。这个 IP 和你 Windows 的 Tailscale IP 不同。
验证网络状态:
# 6. 检查节点状态
tailscale status
你会看到类似输出,确认你的 WSL(主机名可能是 ubuntu 或 DESKTOP-XXX)状态为 Active:
100.123.45.789 ubuntu your-email@example.com Linux active
4. 为 WSL 配置 SSH 公钥登录
WSL 是一个独立的 Linux 系统,它有自己的用户账户和 SSH 配置。之前在 Windows 上配置的公钥(在 C:\\Users\\lenovo\\.ssh\\ 里)只对 Windows 的 SSH 服务有效。
现在需要把家里的公钥也配置到WSL 系统的 Linux 用户里。
在公司电脑上,进入 WSL 的 Ubuntu 终端,然后按以下步骤操作:
(1)在 WSL 中创建 .ssh 文件夹和授权文件
# 1. 进入你的用户主目录
cd ~
# 2. 创建 .ssh 目录并设置严格权限(非常重要!)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 3. 创建 authorized_keys 文件并设置权限
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
(2)将家里的公钥添加到 WSL
现在需要把家里电脑 id_rsa.pub 的内容,放到 WSL 的 authorized_keys 文件里。
方法 A(推荐):如果 WSL 可以访问 Windows 文件 先把家里电脑的. ssh/id_rsa. pub 文件发送到公司电脑的下载文件夹中。 在 WSL 终端执行:
# 1. 查看你家里公钥的内容(从Windows目录读取)
cat /mnt/c/Users/lenovo/Downloads/id_rsa.pub
# 2. 将公钥内容添加到WSL的授权文件
cat /mnt/c/Users/lenovo/Downloads/id_rsa.pub >> ~/.ssh/authorized_keys
注意:如果 Windows 用户名不是 lenovo,请替换路径中的 lenovo 为你的实际用户名。
方法 B:手动复制粘贴
(3)确保 WSL 的 SSH 服务已启用并运行
# 1. 确保SSH服务器已安装
sudo apt update
sudo apt install openssh-server -y
# 2. 启动SSH服务
sudo service ssh start # 或 sudo systemctl start ssh
# 3. 检查SSH服务状态
sudo service ssh status
如果状态显示 active (running) 就对了。
总结:两个系统,两套配置
现在你拥有了两套独立的 SSH 连接:
| 公司 Windows 系统 | 100.123.45.678 | lenovo (Windows 用户) | C:\\Users\\lenovo\\.ssh\\authorized_keys |
| 公司 WSL 系统 | 100.123.45.789 | 你的WSL用户名 (Linux 用户) | ~/.ssh/authorized_keys (WSL 内) |
5. 最终测试:从家里的电脑连接 WSL
现在,回到你家里的电脑,打开命令提示符,尝试用新的 WSL IP进行连接:
ssh 你的WSL用户名@100.123.45.789
请将 你的WSL用户名 替换为你在 WSL 里创建的用户名(第一步安装 WSL 时设置的),将 100.123.45.789 替换为你刚刚记下的 IP。
如果连接成功,你会直接进入 WSL 的 Ubuntu 命令行,不再需要 Windows 密码。
6. 安装速度太慢怎么办?
安装Tailscale的时候发现下载速度极慢,哪怕根据AI的意见修改的镜像源、用了VPN还是没起色。后来还是在Windows下单独下载了.deb安装包,然后直接用安装包安装。
(1)清理缓存并重新安装
这是因为APT有断点续传和缓存机制,中断后会从缓存继续。如果之前用Ctrl+C中断了下载,可能需要彻底清理缓存,强制重新下载。
在WSL终端中,依次执行以下命令:
# 1. 清理已下载的tailscale缓存包(关键!)
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*partial/*
# 2. 再次更新软件列表(使用新源)
sudo apt-get update
(2)手动下载.deb包安装
在Windows浏览器中直接下载安装包:
- 打开Edge/Chrome,访问:https://pkgs.tailscale.com/stable/tailscale_1.94.1_amd64.deb
(这个版本号是刚才下载时在终端信息中看到的,如需查看其他版本号可访问 https://pkgs.tailscale.com/stable/ 查看) - 文件会自动下载到 C:\\Users\\lenovo\\Downloads\\(你的下载目录)。
在WSL中安装此包: 回到WSL终端,执行:
# 进入Windows下载目录(注意:lenovo换成你的用户名)
cd /mnt/c/Users/lenovo/Downloads/
# 安装.deb包
sudo dpkg -i tailscale_*.deb
# 安装可能缺失的依赖
sudo apt-get install -f -y
7.其他
家里电脑 SSH 连接失败? 可能原因:WSL 内的 SSH 服务器没开。 解决:在公司电脑 WSL 内执行:
sudo apt install openssh-server -y
sudo service ssh start
然后再次尝试从家里连接。
成功后的关键点:两个独立 IP。现在你有了两个 Tailscale IP:一个是 Windows 的(如 100.123.45.678),一个是 WSL 的(如 100.123.45.789)。远程深度学习请使用 WSL 的 IP。
五、在VS Code中操作远程文件
建立ssh连接
建立ssh连接的过程和前面Windows下的基本一致。另外其实可以在家用电脑的 C:\\Users\\admin\\.ssh\\config 文件中做配置,这样之后ssh连接的名称就不用记IP了。下面是一个示例:
# 公司电脑的WSL连接 (主用,用于深度学习开发)
Host company_wsl
HostName 100.123.45.789
User gonglab
# Port 22 可以省略,因为22是SSH默认端口
# IdentityFile ~/.ssh/id_rsa # 如果密钥不是默认位置可以指定
# 公司电脑的Windows连接(备用,用于管理Windows文件或服务)
Host company_win
HostName 100.123.45.678
User lenovo
# Port 22 同样可以省略
如何使用这个配置
在VS Code中连接:
- 按 F1 打开命令面板。
- 输入 Remote-SSH: Connect to Host… 并选择。
- 你会看到一个下拉列表,里面就有你定义的 company_wsl 和 company_win 两个主机别名。
- 选择 company_wsl 即可连接。
在命令行中连接:
- 配置好后,你无需再记IP地址。
- 打开命令提示符或PowerShell,直接输入:ssh company_wsl
效果等同于 ssh gonglab@100.123.45.789。
重要提醒:WSL的SSH服务
确保WSL内的SSH服务正在运行,这是连接成功的前提。如果之前没配置,需要在公司电脑的WSL终端中执行:
sudo apt update && sudo apt install openssh-server -y
sudo service ssh start
# 可选:设置开机自启(对于WSL,需要配置Windows任务计划,较为复杂,通常手动启动即可)
远程操作
需要注意的是在WSL中需要重新安装python等插件,对于代码也要选择对应的python解释器,否则解析不了安装的库。
打开远程文件夹,在终端中输入:
cd /mnt/d/Academic/projects
code .
下面是一个示例代码,如果能运行则意味着上述配置成功。
import gymnasium as gym
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
# ————————–
# 1. 定义简单的深度Q网络(DQN)
# ————————–
class SimpleDQN(nn.Module):
def __init__(self, state_dim, action_dim):
super(SimpleDQN, self).__init__()
# 极简的全连接网络,适合CartPole这种简单环境
self.fc = nn.Sequential(
nn.Linear(state_dim, 64), # 输入层:状态维度→隐藏层
nn.ReLU(), # 激活函数
nn.Linear(64, action_dim) # 输出层:隐藏层→动作维度
)
def forward(self, x):
return self.fc(x)
# ————————–
# 2. 环境初始化与参数设置
# ————————–
# 创建CartPole环境(经典控制任务,状态维度4,动作维度2)
env = gym.make("CartPole-v1")
state_dim = env.observation_space.shape[0] # 状态维度:4
action_dim = env.action_space.n # 动作维度:2(左/右)
# 初始化模型、优化器和损失函数
model = SimpleDQN(state_dim, action_dim)
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.MSELoss()
# ————————–
# 3. 极简的训练循环(仅用于环境测试)
# ————————–
def test_training_step():
# 重置环境,获取初始状态
state, _ = env.reset()
total_reward = 0
done = False
while not done:
# 将状态转换为PyTorch张量(适配模型输入)
state_tensor = torch.FloatTensor(state).unsqueeze(0)
# 模型预测动作价值
q_values = model(state_tensor)
# 随机选择动作(简化版,实际DQN会用ε-贪心策略)
action = np.random.choice(action_dim)
# 执行动作,获取环境反馈
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated # 任务结束标志
total_reward += reward
# ————————–
# 极简的DQN更新逻辑(仅用于测试)
# ————————–
# 目标Q值(简化:直接用即时奖励)
target_q = torch.FloatTensor([reward])
# 当前Q值(模型预测的选中动作的价值)
current_q = q_values.squeeze(0)[action]
# 计算损失并更新模型
loss = criterion(current_q, target_q)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 更新状态
state = next_state
return total_reward
# ————————–
# 4. 运行测试
# ————————–
if __name__ == "__main__":
# 打印环境和设备信息(验证配置)
print(f"✅ 环境加载成功:CartPole-v1")
print(f"✅ 状态维度:{state_dim},动作维度:{action_dim}")
print(f"✅ PyTorch设备:{'GPU' if torch.cuda.is_available() else 'CPU'}")
# 运行5个测试回合
for episode in range(5):
reward = test_training_step()
print(f"回合 {episode+1} | 总奖励:{reward}")
# 关闭环境
env.close()
print("\\n🎉 所有测试完成!如果没有报错,说明你的DRL环境配置正常。")




