将jupyter笔记本转换为nuclio
nuclio-jupyter的Python项目详细描述
python和jupyter的nuclio函数自动化
用于自动生成和部署nuclio的python包
来自代码、存档或jupyter笔记本的无服务器功能。
提供了一个强大的自动代码和函数生成机制,
简单的调试、生命周期管理和与数据科学工具的本机集成。
该软件包提供以下功能
- 自动将代码/文件+依赖项(环境、包配置、数据/文件)转换为nuclio函数规范或存档
- 自动将nuclio函数(代码、规范或存档)构建并部署到群集上
- 提供与jupyter的本地集成
- 根据外部对象存储(s3、http/s、git或iguazio)处理函数+规范版本控制和归档
什么是nuclio?
Nuclio是一个运行在Docker或Kubernetes上的高性能无服务器平台
并自动化代码的开发、操作和扩展(使用多种受支持的语言编写)。
nuclio函数可以通过http、流行的消息/流协议、计划的事件和批处理触发。
nuclio可以作为托管产品在云中运行,也可以在任何kubernetes集群(cloud、on prem或edge)上运行
了解更多关于nuclio的信息…
nuclio和这个包是iguazio托管数据科学平台的一个组成部分,您可以在iguazio教程中看到许多端到端的使用示例和笔记本。
它是如何工作的?nuclio take code+函数规范+可选文件工件,并自动将它们转换为Kubernetes上的自动缩放服务。
这些工件可以作为yaml文件(带有嵌入代码)、dockerfile或archives(git或zip)提供。
函数规范允许您定义从cpu/mem/gpu需求、包依赖项、环境变量、机密、共享卷到所有的东西。API网关配置等。
这个包试图通过更抽象的api和%nuclio
magic命令来简化配置和部署,这些命令最终以yaml或归档格式构建代码+规范工件。
(当需要打包其他文件或进行版本控制时,最好使用存档)
%nuclio
magic命令使用简单,但如果您需要更多
可编程性使用python api调用创建和部署函数
(build_file
,deploy_file
和deploy_code
)来自您的代码或笔记本电脑。
用法
- 安装
- 使用
%nuclio
magic在笔记本中创建和调试函数 - 使用nuclio magic创建和调试函数rel="nofollow">使用jupyter ui导出函数
- 导出、版本控制和存档功能
- 直接从archive或git部署函数或版本rel="nofollow">直接从archive或git部署函数或版本
- 使用python api创建和部署函数rel="nofollow">使用python api创建和部署函数
- 控制功能代码和配置:
%nuclio cmd
-定义包依赖项%nuclio env
和env文件
-配置本地和远程env变量%nuclio处理程序
-函数处理程序包装器%nuclio mount
-将共享卷装入函数中%nuclio配置
-资源、规范和触发器配置%nuclio build
-生成和/或上载功能规范或存档%nuclio deploy
-将函数部署到集群上%nuclio show
-显示生成的函数代码和规范(yaml)
- 高级主题
- nuclio
init_context()
hook用于初始化资源(跨调用) - 将
context.logger
详细级别更改为调试 - 使用Docker
- nuclio
- 链接
- 开发
- 许可证
安装
pip install --upgrade nuclio-jupyter
通过在单元格中运行以下命令安装到Jupyter笔记本中
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
要访问库,请使用import nuclio
使用%nuclio
magic创建和调试函数
%nuclio
魔术命令和一些注释符号(例如\nuclio:ignore
)
帮助我们提供非侵入性的提示,告诉我们如何将笔记本转换成一个完整的功能+规范。
我们不打算包含在最终函数中的单元格(例如打印、绘图、调试代码等)的前缀是nuclio:ignore
如果我们希望环境变量和包安装等设置自动出现在功能规范中
我们使用env
或cmd
命令,这些命令将自己复制到函数规范中。
注意:如果要忽略笔记本开头的许多单元格(例如 数据探索和模型训练)我们可以在第一个相关的代码单元使用 而不是用"忽略"来标记上面的所有单元格 < BR>
编写完代码后,我们可以使用内置的nucliocontext
对象模拟代码
(参见:调试函数)完成后,我们可以使用export
命令生成函数yaml/archive
或者使用deploy
在nuclio/kubernetes集群上自动部署功能。
我们可以使用其他命令,如show
来打印生成的函数+规范,
config
设置各种规格参数(如CPU/Mem/GPU要求、触发器等);
以及mount
将共享卷自动装入函数。
更多细节使用%nuclio帮助
或%nuclio帮助<;命令>;
示例:
可以看到以下配置资源、编写和测试代码的示例,
部署函数,并测试最终函数。
注意,无服务器函数有一个入口点(handler
),由运行时引擎和触发器调用。
处理程序携带两个对象,acontext
(运行时对象,如logger)和event
(由客户端或触发器传递的主体和其他属性)。
我们从importnucilo
包开始,初始化%nuclio
magic命令和context
对象
此部分不应复制到函数中,因此我们用nuclio:ignore
# nuclio: ignoreimportnuclio
功能规格/配置
以下部分设置环境变量,安装所需的包,
并设置一些特殊配置(例如,设置用于功能的基本docker图像)。
注意,环境变量和包将部署在笔记本和函数中,
我们可以指定只对本地(-l
)或nuclio规范(-c
)感兴趣。
我们可以在那些带有${var_name}
的命令中使用本地环境变量,有关详细信息,请参见help
。
注意:%
用于单行命令,%
表示该命令应用于整个单元格,请参见详细信息
%nuclio cmd pip install textblob
%nuclio env TO_LANG=fr
%nuclio config spec.build.baseImage = "python:3.6-jessie"
magic命令只接受常量值或局部环境变量作为参数
如果您对更大的灵活性感兴趣,请使用nuclio.build_file()
或nuclio.deploy_file()
api调用,请参见使用python api创建和部署函数rel="nofollow">python api调用
功能代码
在您想成为管理员的单元格中,您可以使用以下两种方法之一:
- 创建
def处理程序(上下文、事件)
函数(传统的nuclio方式) - 或者用
%%nuclio handler标记一个单元格,这意味着这个单元格是handler函数(jupyter方式)
当使用第二种方法时,我们在返回行的末尾使用nuclio:return
标记返回行。
本地功能测试
我们可以使用内置的nucliocontext
和nuclio.event
对象在本地模拟我们的函数,
我们创建一个事件对象(消息体、头等)并用
context
对象和新的事件
对象,这将模拟生成的事件触发器。
我们还可以使用for
循环来模拟具有多个事件的函数
# nuclio: ignoreevent=nuclio.Event(body=b'good morninng')handler(context,event)
功能构建或部署
完成后,我们使用%nuclio deploy
命令构建函数并在实际集群上运行它,
注意deploy命令返回一个有效的http端点,可用于测试/使用我们的实际功能。
将代码部署为项目ai下的nuclio函数
nlp
:
%nuclio deploy -n nlp -p ai
如果我们只想生成函数code+spec或 存档和/或上载/提交到外部存储库,而不在群集中运行它们 这也可以用于自动化的ci/cd,可以构建函数并将其推送到git 并触发一个ci进程,该进程只在函数通过测试后才部署该函数。
如果要在部署之前查看生成的代码和yaml配置文件,请使用%nuclio show
命令
要获得更大的灵活性,请使用nuclio.build_file()
或nuclio.deploy_file()
api调用,请参见下面的示例:
# nuclio: ignore# deploy the notebook code with extra configuration (env vars, config, etc.)spec=nuclio.ConfigSpec(config={'spec.maxReplicas':2},env={'EXTRA_VAR':'something'})addr=nuclio.deploy_file(name='nlp',project='ai',verbose=True,spec=spec,tag='v1.1')# invoke the generated function resp=requests.get('http://'+addr)print(resp.text)< Buff行情>
注意:包含nuclio:ignore
注释的单元格将在生成中被忽略
过程:
运行非python函数
该库不仅限于python代码,还支持其他语言,如 输出: 运行命令,将其添加到导出配置中的"build.commands"。 如果您只想将说明添加到function.yaml
在本地运行它,使用'--config only'或'-c'标志 设置环境变量。将更新配置中的"spec.env"。 如果您只想将说明添加到function.yaml
在本地运行它,使用'--config only'或'-c'标志 如果您只想在本地运行而不想将指令添加到
function.yaml,使用'--local only'或'-l'标志 从文件设置环境。将更新配置中的"spec.env"。 将此单元格标记为处理程序函数。您可以提供可选名称 将共享文件卷装入函数。 设置函数配置值(资源、触发器、生成等)。
值需要数值、字符串或json字符串(1,"debug",3.3,{..})
您可以使用+=将值附加到列表。 参见nuclio配置参考
建立笔记本/代码+配置,生成/上传yaml或存档。 使用配置为nuclio功能的笔记本/文件进行部署。 打印出功能代码和规范(yaml)。
在调用此功能之前,您应该保存笔记本。 默认情况下,内置上下文对象设置为打印信息级及以上级别的日志,
如果要打印调试级日志,可以键入以下内容 日志记录级别仅适用于笔记本/模拟,以更改函数运行时
日志级别您应该使用 您可以构建一个Docker图像并进行尝试 然后在http://localhost:8888" rel="nofollow">http://localhost:8888"打开浏览器
我们使用的是作为包管理器的pipenv。安装
依赖项运行 要运行测试,请运行 要上载到pypi,请在中更改版本后运行 apache 2.0(请参见license.txt)
go
,
<代码>节点.js<代码> >代码> java/COD>,和<代码> BASH < /代码>。请参阅下面的bash代码示例。注意
您可以使用build命令(cmd=
)在函数中安装任何包/二进制文件。
7
pip install --upgrade nuclio-jupyter
8
pip install --upgrade nuclio-jupyter
控制功能代码和配置
<命令>
9
pip install --upgrade nuclio-jupyter
0
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
Env
1
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
2
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
环境文件
3
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
处理程序
4
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
安装
5
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
配置
6
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
构建
7
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
展开
8
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
显示
高级主题
nuclio
init_context()
hook用于初始化资源(跨调用)将
context.logger
详细级别更改为调试
9
# nuclio: ignore
!pip install --upgrade nuclio-jupyter
config
或nuclio用户界面。使用Docker
构建
# nuclio: ignoreimportnuclio
0
<运行< > ># nuclio: ignoreimportnuclio
1
链接
开发
# nuclio: ignoreimportnuclio
2
# nuclio: ignoreimportnuclio
3
make upload
。
nuclio/\uu init\uu.py
或python cut\u release<;version>;
。后者将更新
nuclio/\u init.py中的版本。下一个版本可以使用
+
。问
提供PYPI证书。许可证
推荐PyPI第三方库