2025/12/29 1:29:07
网站建设
项目流程
自己做的网站谁来维护,印刷厂网站源码,做直播哪个网站好,上海网站快速排名提升文章目录背景我遇到的一些问题问题暂时的解决方法文本数据#xff1a;直接打印序列化数据#xff1a;notebook本身就是序列化数据存储的结果先讲一点前端与后端好#xff0c;现在回来讲为什么vscode的扩展不能够挂载Google Drive问题#xff1a;解答#xff1a;Colab 网页…文章目录背景我遇到的一些问题问题暂时的解决方法文本数据直接打印序列化数据notebook本身就是序列化数据存储的结果先讲一点前端与后端好现在回来讲为什么vscode的扩展不能够挂载Google Drive问题解答Colab 网页版挂载 Google Drive 的原理VS Code 的 Colab 扩展挂载 Google Drive 的限制关键区别前端与后端的交互网页版 ColabVS Code 的 Colab 扩展为什么某些功能在网页版中可以工作而在 VS Code 扩展中不行前后端的交互本质还是这个网页版 ColabVS Code 的 Colab 扩展回过头来看Notebook总结背景刚摸到了vscode的官方colab扩展参考我之前的博客在vscode中使用colab的GPU算力本来想着先白嫖一下GPU算力但是实际体验反倒是先遇到了一大堆问题。主要是不能挂载google drive比如说google.colab库的一些功能不能实现参考github issue https://github.com/googlecolab/colab-vscode/issues/215不能访问本地文件系统还是只能云端访问文件这意味着我们只能通过某种方法将文件或者是数据上传到云端也就是colab server最糟的是google drive还不能挂载见上面那个问题参考github issue https://github.com/googlecolab/colab-vscode/issues/300https://github.com/googlecolab/colab-vscode/issues/285暂时没有好的方法将文件上传到colab服务器或者是从colab服务器下载处理好的文件参考github issue https://github.com/googlecolab/colab-vscode/issues/223https://github.com/googlecolab/colab-vscode/issues/267我遇到的一些问题问题我第一个遇到的问题很简单就是我在colab服务器中输出了几个文件markdown、html都存在/content也就是colab服务器路径中无法访问本地路径所以无法直接download到本地路径中。所以我就试了一些方法google drive网盘挂载这个是网页版colab经常使用的操作比如说我们有大型数据或者需要保存某一个文件都是将google drive挂载到colab服务器上然后我们就可以访问drive比如说访问drive中我们的训练数据或者是将文件输出到drive这样就算服务中断了我们依然可以到drive中下载输出的中间数据。# 方法 1保存到 Google Drive (推荐)# 这会将我们的 Google Drive 挂载到 /content/drive然后我们可以把文件复制进去。fromgoogle.colabimportdrive drive.mount(/content/drive)# 挂载成功后执行下面的命令把打包好的文件复制到我们的网盘根目录# 确保我们已经运行了前面的 tar 命令生成了 archive.tar.gz!cp nnfs*/content/drive/MyDrive/print(文件已复制到 Google Drive! 请去你的网盘查看。)但是不行所以总结该问题在背景中详细原因见后文。# 方法 2使用 transfer.sh 生成下载链接 (无需登录)# 如果不想挂载网盘可以用这个命令把文件上传到临时服务器它会返回一个下载链接。# 复制输出的链接在我们的本地浏览器里打开即可下载。!curl--upload-file./nnfs*https://transfer.sh/archive.tar.gz也不行然后看到了github上的一个老哥同样的问题https://github.com/googlecolab/colab-vscode/issues/267暂时的解决方法文本数据直接打印既然我只需要 nnfs.md 和 nnfs.html 这两个文本文件而且网络下载有问题最简单粗暴的方法就是直接把它们的内容打印在屏幕上然后我复制粘贴到本地。虽然听起来很蠢但是我暂时找不到什么办法了好在这两个文件就是单纯的文本文件所以我可以直接获取文本内容。# 直接打印文件内容 (适用于文本文件)# 既然我只需要 nnfs.md 和 nnfs.html我们可以直接把它们的内容打印出来。# 运行后直接复制输出框里的内容然后在我本地新建文件粘贴进去即可。importos files_to_download[nnfs.md,nnfs.html]forfilenameinfiles_to_download:ifos.path.exists(filename):print(f\n{*20}START OF{filename}{*20}\n)withopen(filename,r,encodingutf-8,errorsignore)asf:print(f.read())print(f\n{*20}END OF{filename}{*20}\n)else:print(f文件{filename}不存在)在输出框中找到 START OF nnfs.md 和 END OF nnfs.md 之间的内容复制并粘贴到我本地的 nnfs.md 文件中对nnfs.html文件做同样的操作。真的纯手工。序列化数据notebook本身就是序列化数据存储的结果还有一种方法既然colab能够访问我们的notebook脚本虽然不能够访问本地其他的文件。那么其实notebook本身也可以看作是一种数据结构一个文件输出。仔细想想看我们平时dataframe、csv或者是图片的打印以及输出是不是都是在jupyter notebook中直接渲染显示的是不是每一次运行之后我们都可以对这个脚本本身进行保存是不是每一次运行之后我们的notebook文件越来越大其实我们可以将notebook本身看作是一种序列化的数据也就是内存中的数据读取到硬盘中的结果。那么我们能不能直接cat比如说用文本格式打开这个notebook然后在输出chunk中将这部分内容截取出来再自己解析比如说print1个网页我们可以将这一部分notebook中的文本内容也就是html截取出来再自己手动解析。再讲深入一点我们是不是可以从IOstream、IObuffer中读取这一部分数据我在想colab既然修改了我们本地的jupyter notebook那么这个变化的数据必然被返回在了某一个地方。比如说从IObuffer也就是输入输出流、输入输出缓存中我们如果能够拿到这一部分数据比如说序列化的数据pickle那么我们能不能够还原呢先讲一点前端与后端先简单贴一个亚马逊aws云上对于前后端的一个技术栈粗暴归纳前端后端技术前端使用 HTML、CSS、JavaScript 和前端框架。后端使用 Java、Python、Ruby、API 和数据库管理系统等编程语言。并发每位用户都有自己的应用程序副本因此前端不必处理并发问题。后端使用多种策略同时处理成千上万的用户请求。缓存浏览器或客户端应用程序缓存应用程序中的文件并使用它们来提高性能。后端系统在不同的服务器或 CDN 中缓存文件。安全性主要由用户负责前端开发中的安全性。前端开发人员主要关注用户输入验证和用户身份验证工作流程。后端开发中的安全性更加全面可以保护数据库、后端服务和应用程序本身。使用加密、安全身份验证系统和安全编码实践实现此安全性。开发目标前端开发侧重于创建功能齐全、响应迅速且设计良好的用户界面。后端开发涉及创建支持前端开发的可靠架构。开发技能前端开发人员知悉 HTML、CSS 和 JavaScript。他们可以使用前端框架并创建具有视觉吸引力的页面。他们解决用户在与应用程序交互时面临的痛点。后端开发人员具有编码和数据库管理技能。他们还了解代码安全性以及如何使用应用程序开发工具、平台和框架。前端front-end和后端back-end是描述进程开始和结束的通用词汇。前端作用于采集输入信息后端进行处理。计算机程序的界面样式视觉呈现属于前端。参考中文维基百科https://zh.wikipedia.org/wiki/%E5%89%8D%E7%AB%AF%E5%92%8C%E5%90%8E%E7%AB%AF参考https://aws.amazon.com/cn/compare/the-difference-between-frontend-and-backend/好现在回来讲为什么vscode的扩展不能够挂载Google Drive问题为什么我在网页的colab上能够挂载google drive但是在vscode的扩展就不行这明明就是一个库嘛难道我不能pip或者conda事情起因见上问题Github上同样有https://github.com/googlecolab/colab-vscode/issues/256fromgoogle.colabimportdrive drive.mount(/content/drive)看起来就是一个库google.colab的问题嘛为什么我在vscode中的colab扩展中就不能够运行解答在 Colab 的网页版和 VS Code 的 Colab 扩展中挂载 Google Drive 的方式和原理有所不同。简短版的原因如下Colab 网页版挂载 Google Drive 的原理基于 Colab 的后端服务Colab 网页版是一个基于云端的服务它通过其后端服务器来实现对 Google Drive 的挂载。当你在 Colab 网页版中运行挂载代码时Colab 的后端会处理与 Google Drive 的认证和文件系统挂载等操作这些操作是通过 Colab 自身的后端服务与 Google Drive 的 API 进行交互来完成的。自动处理认证流程Colab 网页版能够自动引导用户完成认证流程用户只需点击授权按钮Colab 就会自动获取到访问 Google Drive 所需的权限并将 Google Drive 挂载到 Colab 的文件系统中这个过程对用户来说是相对透明和自动化的。VS Code 的 Colab 扩展挂载 Google Drive 的限制运行环境的差异VS Code 是一个本地运行的代码编辑器而 Colab 扩展在 VS Code 中运行时其运行环境与 Colab 网页版的云端环境不同。在 VS Code 中没有 Colab 网页版那样的后端服务来支持挂载 Google Drive 的操作因此无法直接使用 Colab 网页版的挂载机制。权限和安全限制由于 VS Code 是在本地运行的涉及到本地文件系统和外部存储如 Google Drive的交互会受到操作系统的权限和安全限制。与 Colab 网页版相比VS Code 的 Colab 扩展在访问外部存储时需要更多的用户授权和配置而且这些授权和配置需要在本地环境中进行这增加了实现挂载功能的复杂性。扩展的功能限制VS Code 的 Colab 扩展主要是为了在 VS Code 中提供对 Colab 笔记本的支持如代码编辑、运行等基本功能而不是专门用于挂载外部存储的工具。虽然理论上可以通过扩展来实现挂载 Google Drive 的功能但目前该扩展可能没有实现这一功能或者实现起来存在一些技术难题和限制。关键区别前端与后端的交互网页版 Colab网页版 Colab 是一个完整的、基于云端的服务它提供了前端和后端的紧密集成前端Web UI网页版 Colab 的前端是一个基于浏览器的用户界面它通过 JavaScript 与后端进行交互。这个前端能够处理用户输入、显示输出并且能够调用后端服务来完成各种操作包括挂载 Google Drive 和获取用户数据。后端服务Colab 的后端服务是运行在 Google 的服务器上的它提供了对 Google Drive 的访问、计算资源的管理等功能。前端通过特定的 API 与后端通信后端处理所有与 Google Drive 的交互包括认证、文件挂载等。认证和授权网页版 Colab 的前端能够自动处理与 Google Drive 的认证流程。当用户点击授权按钮时前端会引导用户完成 OAuth 认证然后将认证信息传递给后端后端使用这些信息来挂载 Google Drive。VS Code 的 Colab 扩展VS Code 的 Colab 扩展是一个本地运行的工具它通过 Jupyter Notebook 的协议与 Colab 的后端进行交互本地运行环境VS Code 是一个本地运行的代码编辑器它通过 Colab 扩展与 Colab 的后端进行交互。这个扩展主要负责在本地编辑和运行代码但它没有网页版 Colab 那样的前端服务来处理与 Google Drive 的交互。Jupyter Notebook 协议VS Code 的 Colab 扩展使用 Jupyter Notebook 的协议与 Colab 的后端进行通信。这种协议主要用于代码的执行和输出的显示而不是用于处理复杂的前端交互如挂载 Google Drive 或获取用户数据。缺乏前端服务由于 VS Code 的 Colab 扩展没有网页版 Colab 那样的前端服务它无法自动处理与 Google Drive 的认证流程。因此一些依赖于前端服务的功能如 google.colab.drive.mount 和 google.colab.userdata.get在 VS Code 的 Colab 扩展中无法直接使用。为什么某些功能在网页版中可以工作而在 VS Code 扩展中不行前端依赖网页版 Colab 的前端能够处理复杂的用户交互和认证流程这是通过 JavaScript 和 Web API 实现的。这些功能在网页版中是内置的用户只需点击按钮即可完成操作。VS Code 的 Colab 扩展没有这样的前端服务因此无法直接使用这些功能。虽然可以通过其他方式如手动配置认证信息来实现类似的功能但这些方法不如网页版那样自动化和用户友好。后端服务的调用方式网页版 Colab 的前端可以直接调用后端服务这些服务能够处理与 Google Drive 的交互。例如google.colab.drive.mount 和 google.colab.userdata.get 是通过前端调用后端服务来实现的。VS Code 的 Colab 扩展通过 Jupyter Notebook 的协议与后端通信这种协议不支持直接调用这些后端服务。因此这些功能在 VS Code 的 Colab 扩展中无法直接使用。前后端的交互本质还是这个网页版 Colab网页版 Colab 的前端可以通过 JavaScript 调用后端的 API 来完成挂载 Google Drive 的操作。用户点击授权按钮后前端会引导用户完成 OAuth 认证并将认证信息传递给后端后端处理实际的挂载操作。VS Code 的 Colab 扩展VS Code 的 Colab 扩展没有网页版 Colab 那样的前端服务来处理这种复杂的交互。它只能通过 Jupyter Notebook 的协议与后端通信而这种协议不支持直接调用挂载 Google Drive 的 API。因此VS Code 的 Colab 扩展无法直接实现挂载 Google Drive 的功能。就这两点我怎么强调都不过分网页版 Colab前端网页版 Colab 的前端是运行在浏览器中的部分。当你打开 Colab 的网页时浏览器加载了 HTML、CSS 和 JavaScript 文件这些文件构成了你看到的界面。功能前端可以处理用户的输入如点击按钮、输入代码等并显示输出如代码的运行结果。挂载 Google Drive前端通过 JavaScript 调用后端的 API 来完成挂载 Google Drive 的操作。用户点击授权按钮后前端会引导用户完成 OAuth 认证并将认证信息传递给后端。后端网页版 Colab 的后端是运行在 Google 服务器上的部分。它负责处理前端发送的请求例如挂载 Google Drive、运行代码等。功能后端处理与 Google Drive 的实际交互包括认证、文件系统挂载等。VS Code 的 Colab 扩展前端VS Code 本身是一个本地运行的应用程序它有自己的用户界面前端。Colab 扩展运行在 VS Code 中它通过 Jupyter Notebook 的协议与 Colab 的后端通信。功能VS Code 的 Colab 扩展可以编辑和运行代码但它没有网页版 Colab 那样的前端服务来处理复杂的交互如挂载 Google Drive。后端VS Code 的 Colab 扩展通过 Jupyter Notebook 的协议与 Colab 的后端通信。后端仍然运行在 Google 的服务器上负责处理代码的运行和数据存储。功能后端可以处理代码的运行和数据存储但无法直接处理前端的复杂交互如挂载 Google Drive。回过头来看NotebookVS Code 的 Colab 扩展是一个本地工具它通过 Jupyter Notebook 的协议与 Colab 的后端进行交互。它的主要特点包括本地代码编辑VS Code 是一个功能强大的代码编辑器提供了代码高亮、自动补全、调试等功能。连接到 Colab 内核通过 Colab 扩展VS Code 可以连接到 Colab 的后端内核运行代码并获取输出。缺乏前端服务VS Code 的 Colab 扩展没有网页版 Colab 那样的前端服务因此无法直接处理复杂的交互如挂载 Google Drive。总结就是后端是正常必须得实现用得上的所以后端得实现但是前端拉了还没完善。现在回过头来说一下网页端colab和本地vscode的colab扩展有一个问题jupyter notebook有自己的前后端大家以前在select kernel的时候应该也看到过有“select existing jupyter server”的选项那么问题来了我难道不能够通过某种方式暴露网页端colab server比如说获取某种token然后在本地vscode中运行吗比如说Cloudflare Tunnel# 1. 下载并安装 Cloudflare Tunnel!wget-q-nc https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb !dpkg-i cloudflared-linux-amd64.deb# 2. 杀掉可能存在的旧进程# jupyter进程# 3. 启动 Jupyter (设置密码为 1234)# 注意这里加了 --NotebookApp.token1234get_ipython().system_raw(jupyter notebook --NotebookApp.allow_origin\*\ --NotebookApp.ip\0.0.0.0\ --port8888 --NotebookApp.token\1234\ --NotebookApp.disable_check_xsrfTrue )# 4. 启动隧道importtimeimportreimportsubprocessprint(正在启动 Cloudflare Tunnel...)procsubprocess.Popen([cloudflared,tunnel,--url,http://localhost:8888],stdoutsubprocess.PIPE,stderrsubprocess.PIPE)time.sleep(3)found_urlFalsefor_inrange(10):lineproc.stderr.readline().decode(utf-8)iftrycloudflare.cominline:urlre.search(rhttps://[\w-]\.trycloudflare\.com,line)ifurl:print(f\n成功请复制下面的链接到 VS Code:\n{url.group(0)})found_urlTruebreakifnotfound_url:print(未找到 URL请查看日志或重试。)换句话说你真的了解notebook吗、你能够回答这个问题吗AI4S中大部分非cs科班的人恐怕也只是对这个浅尝辄止也只是会用但不清楚notebook到底运行原理如何总结老实说每次遇到新的问题我都觉得自己科班内知识学的不扎实越发觉得自己是一个计算机小白但是经不住现实需求会被各种基础知识和bug吊打。有吊打就会有教训有教训就会有需求所以耐不住人还是活到老学到好时时刻刻都得学习。另外没有python其实世界还过得去没有Javascript不行毕竟人人都有上网的需求。Javascript搞计算的哪怕是计算交叉领域的非科班生有需求还是得学的甚至是必学有些知识都是现代网络的基础不学不行。