You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code运行Jupyter Notebook报Session cannot generate requests错误

问题背景

在Mac设备上开发图像分类器项目时,运行如下像素归一化代码后:

train_x=train_x/255.0
test_x=test_x/255.0
val_x=val_x/255.0

后续执行任意单元格都会抛出如下错误栈:

Error: Session cannot generate requests
Error: Session cannot generate requests
at w.executeCodeCell (/Users/ethan/.vscode/extensions/ms-toolsai.jupyter-2021.8.2041215044/out/client/extension.js:52:301310)
at w.execute (/Users/ethan/.vscode/extensions/ms-toolsai.jupyter-2021.8.2041215044/out/client/extension.js:52:300703)
at w.start (/Users/ethan/.vscode/extensions/ms-toolsai.jupyter-2021.8.2041215044/out/client/extension.js:52:296367)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async t.CellExecutionQueue.executeQueuedCells (/Users/ethan/.vscode/extensions/ms-toolsai.jupyter-2021.8.2041215044/out/client/extension.js:52:311160)
at async t.CellExecutionQueue.start (/Users/ethan/.vscode/extensions/ms-toolsai.jupyter-2021.8.2041215044/out/client/extension.js:52:310700)
根因定位

该报错本质是VS Code连接的Jupyter内核异常崩溃断连,触发点和归一化操作直接相关,核心诱因有三类:

  • 数组类型默认升级导致内存溢出:原始图像像素数据一般是uint8类型(单值占1字节),直接除以浮点数255.0时,NumPy会默认把整个数组转为float64类型(单值占8字节),内存占用直接翻8倍,Mac系统内存保护机制会直接杀掉超阈值占用的Python进程,内核断连后扩展就会抛出无法生成请求的错误。
  • 所用Jupyter扩展版本存在已知bug:报错栈里的ms-toolsai.jupyter-2021.8.2041215044是2021年的旧版本,本身存在大数组操作时内核连接异常断开、错误上报不精准的问题。
  • 多线程计算冗余占内存:默认配置下NumPy关联的OpenBLAS库会调用和CPU核心数一致的线程做数组计算,大数组场景下会产生额外的内存副本开销,进一步放大内存压力。
修复步骤

按优先级依次操作即可解决:

  1. 优化归一化代码逻辑,降低内存占用
    显式指定转换为float32类型(单值占4字节,完全满足图像归一化的精度需求),替换原有归一化代码为:
    train_x = train_x.astype('float32') / 255.0
    test_x = test_x.astype('float32') / 255.0
    val_x = val_x.astype('float32') / 255.0
    
    如果数据集总大小超过机器可用内存的1/2,不要一次性加载全量数据到内存,改用框架自带的数据集加载器按批次读取、实时做归一化处理。
  2. 重置内核运行环境
    点击Jupyter笔记本顶部的「重启内核」按钮,清空之前运行残留的变量、内存碎片,再执行修改后的代码。
  3. 升级存在bug的扩展版本
    在VS Code扩展面板找到Microsoft官方Jupyter扩展,升级到最新稳定版,旧版本的连接稳定性问题在后续迭代中已全部修复。
  4. 限制计算线程数减少冗余内存占用
    在笔记本最开头的单元格添加如下代码,限制OpenBLAS的并行线程数,避免不必要的内存副本:
    import os
    os.environ['OPENBLAS_NUM_THREADS'] = '4'
    

排查时可以打开Mac自带的活动监视器,搜索Python进程观察内存变化,如果运行归一化时内存占用短时间冲到物理内存上限后进程消失,即可确认是内存溢出导致的问题。

内容的提问来源于stack exchange,提问作者ekta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:18:44