在最初的IJava安装和浏览器页面刷新之后,我所有的笔记本都停止了连接。
曾经管用的
1.执行此第一个单元格
!wget https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip
!unzip ijava-1.3.0.zip
!python install.py --sys-prefix
1.等待Installed java kernel
消息
1.刷新浏览器页面。
1.使用Java代码执行任何单元格。
现在发生的是
我可以执行第一个单元格并获得Installed java kernel
消息,看到笔记本状态为“Connected”。
但刷新页面后,笔记本的状态永远停留在“正在连接”,
因此没有单元可以被执行。
我免费使用GoogleColab,但由于初始安装仍然有效,并且在页面刷新之前笔记本状态为“已连接”,这应该不是问题所在。
知道有什么变化吗?我怎样才能让我的Java笔记本电脑再次连接?
更新1
页面重新加载后,当我尝试运行包含Java代码的单元格时,过了一会儿,我得到了以下错误消息:
await connected: disconnected
@https://ssl.gstatic.com/colaboratory-static/common/5f9fa09db4e185842380071022f6c9a6/external_polymer_binary_l10n__en_gb.js:6249:377
promiseReactionJob@[native code]
此外,笔记本设置包括
运行时类型:java
硬件加速器:None
个
这些单元包含非常简单的Java代码,没有外部库,没有CPU或GPU密集型的东西。
出于调试的目的,我尝试运行其他单元格(比如安装了Java或Python代码的单元格)--当然,它们也不能在没有连接的情况下执行。
更新2
在安装IJava之后和页面重新加载之前,我注意到Java内核的路径与“预安装”的ir和python3内核的路径不同:
!jupyter kernelspec list
Available kernels:
ir /usr/local/share/jupyter/kernels/ir
python3 /usr/local/share/jupyter/kernels/python3
java /usr/share/jupyter/kernels/java
这就是问题所在吗?
(我以前从未检查过,所以我不知道最近是否更改了默认路径。)
以下是ipynb文件的元数据内容:
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [{
"file_id": "...",
"timestamp": 1670411565504
}, {
"file_id": "...",
"timestamp": 1670311531999
}, {
"file_id": "...",
"timestamp": 1605675807586
}],
"authorship_tag": "..."
},
"kernelspec": {
"name": "java",
"display_name": "java"
}
},
"cells": [{
...
]}
}
2条答案
按热度按时间arknldoa1#
在某个时候,colab将默认传输更改为
ipc
(从默认的tcp
),这不受IJava支持。/usr/bin/python3 /usr/local/bin/jupyter-notebook --ip=... --transport=ipc --port=...
内核启动了,但从未正确连接,也没有发送jupyter等待的初始内核信息消息。
当/如果有一个点,我们可以要求启动
tcp
传输代替,这将是更可取的(见https://github.com/googlecolab/colabtools/issues/3267),但目前我们可以解决它。解决方法是在java内核前面粘贴一个小的本地代理,它连接所有的ipc通道,并将它们转发到另一组连接到java内核的tcp通道。
第一个单元格仍然是通常的安装/设置,但也包括代理的安装:
运行该单元格。您可能有
Unrecognized runtime "java"; defaulting to "python3"
,这是可以的。运行单元格后,输出类似于:按照印刷说明操作:
Go to 'Runtime > Change runtime type' and select 'java'
。运行时现在应该显示“已连接到java...”,您应该能够编写和执行java代码。尝试https://colab.research.google.com/gist/SpencerPark/447de114fcd3e6a272dc140809462e30作为基本笔记本电脑的示例。
这个setup单元应该包含了运行所需的一切,但这里对代理内核中的内容做了一些解释,它作为一个要点(https://gist.github.com/SpencerPark/e2732061ad19c1afa4a33a58cb8f18a9)发布,其总体思路是:
1.使用后缀
_tcp
(java_tcp
)重命名真实的内核,并使用预期名称(java
)在其位置安装代理。1.启动代理内核并绑定所有内容,就好像代理本身就是内核一样。
1.使用支持的参数(transport
"tcp"
)和相同的会话信息启动真实的的内核。这一点非常重要,这样我们就可以直接将消息转发到真正的内核,而无需在中间解码它们。1.为每对通道启动ZMQ代理(这是X1 M10 N1 X所做的全部)。
1.那么我们就完成了!2只要等待托管内核进程退出,然后我们自己也退出。
q8l4jmvw2#
可能是内核安装不正确或Colab无法识别内核。
要解决此问题,您可以尝试以下步骤:
1.重新启动运行时:在Colab中,点击“运行时”菜单并选择“重新启动运行时”。这将停止并重新启动运行时,这可能会修复内核安装的任何问题。
1.检查内核安装:要检查IJava内核是否安装正确,可以在Colab单元格中运行以下命令:
!jupyter内核规范列表
这个命令会打印一个可用内核的列表,如果java内核安装正确,它应该包含在列表中。如果java内核没有列出,你可能需要重新安装IJava。
1.在笔记本中指定内核:如果内核安装正确,您可能需要在Colab笔记本中指定内核。为此,单击“运行时”菜单并选择“更改运行时类型”。在“运行时类型”对话框中,从“内核”旁边的下拉菜单中选择“Java”。这将指定笔记本的Java内核。
在问题更新2后更新答案:
可能是Java内核路径的差异导致了您的问题。当您安装IJava时,它会将Java内核安装在
/usr/share/jupyter/kernels/java
目录下,而其他内核默认安装在/usr/local/share/jupyter/kernels/
目录下。要解决此问题,您可以尝试将java目录从
/usr/share/jupyter/kernels/
移动到/usr/local/share/jupyter/kernels/
。为此,您可以使用以下命令:这将把Java内核移动到与其他内核相同的目录,这样Jupyter就可以找到它。
移动内核后,您可能需要重新启动Jupyter以使更改生效。您可以通过运行以下命令来完成此操作:
然后,可以通过运行以下命令再次启动服务器:
这将启动Jupyter服务器,并且Java内核可用。您可以通过再次运行
!jupyter kernelspec list
命令来验证内核是否可用。现在,输出应在可用内核列表中包含Java内核。