FISS和dalmatian的轻松包装器
项目描述
Lapdog
dalmatian和FISS的轻松包装器
先决条件
- Lapdog需要MacOS或Linux。Windows官方不支持
- Lapdog需要Python >= 3.3
- Lapdog需要Google Cloud SDK,可以从这里安装。
- 您的
gcloud --version
应至少为252.0.0
。如果不是,请运行gcloud components update
- 您的
- Lapdog使用您的Gcloud应用程序默认凭据
- 在运行Lapdog之前,请使用
gcloud auth application-default login
和gcloud config set account {account}
- 在运行Lapdog之前,请使用
- Lapdog需要Gcloud的Alpha和Beta套件
- Alpha和Beta套件可以通过
gcloud components install alpha beta
安装
- Alpha和Beta套件可以通过
- (可选) Lapdog用户界面需要node和npm,可以使用系统包管理器安装
- MacOS:
brew install node npm
- Linux: 通过系统包管理器安装或从源安装
- Lapdog需要
node --version
>= 10.15.1 - Lapdog需要
npm --version
>= 6.4.1
- MacOS:
安装
- 通过pip安装lapdog:
pip install lapdog
- 如果您已经安装了lapdog,可以使用
pip install --upgrade lapdog
升级它 - 如果遇到PyYAML错误,请参阅下面的PyYaml注意
- 如果您已经安装了lapdog,可以使用
- (可选) 启用Lapdog用户界面
- 默认情况下,UI 在本地运行。如果您在服务器上安装 Lapdog,则需要为端口 4200 和 4201 设置 SSH 隧道。
- 如果您尚未安装,请安装
node
和npm
。- 如果您使用的是 Mac OS,请运行
brew install node npm
。
- 如果您使用的是 Mac OS,请运行
- 运行
lapdog ui --install
。这可能需要一些时间。
使用方法
- 您可以在 Python 中将
lapdog
导入作为dalmatian
的替代品。- lapdog 提供了 dalmatian 中所有可用的功能的超集。
- 当 lapdog 与 Firecloud 通信时,
WorkspaceManager
会缓存数据。如果 Firecloud 经历间歇性故障,WorkspaceManager
可能能够在离线模式下继续运行。调用WorkspaceManager.sync()
将重新连接到 Firecloud,并推送在离线模式下排队的数据更新。 - lapdog 中的
WorkspaceManager
通过WorkspaceManager.execute()
提供执行 api。执行与提交不同之处在于它们直接在 Google 上运行,并在之后将结果上传回 Firecloud。
lapdog
可以用作命令行工具。- 此工具提供必要的功能来创建工作区、填充数据、导入或上传方法和配置,以及提交作业(或直接执行它们)。
- 运行
lapdog --help
以获取可用命令列表。
- 您可以通过交互式用户界面使用
lapdog
,该界面用于运行和监视 lapdog 执行。- 运行
lapdog ui
以启动用户界面。
- 运行
作业执行
Lapdog 通过为每个 FireCloud 命名空间分配专用的 Google 项目(“引擎”)来执行作业。只能由计费账户管理员初始化给定命名空间的 Lapdog 引擎。要初始化新引擎,请联系您的命名空间管理员,并要求他们运行 lapdog initialize-project
。
引擎初始化后,您必须向其注册。
- 当您在未注册的命名空间中加载工作区时,Lapdog 用户界面将自动为您注册。
- Lapdog Python 模块支持手动注册。
- 在未注册的命名空间中创建
WorkspaceManager
时,您将收到警告。 - 您还可以通过检查
WorkspaceManager.gateway.registered
的值来检查您的注册状态。 - 然后,您可以使用
WorkspaceManager.gateway.register()
进行注册。 - 如果由于任何 FireCloud 错误而导致注册失败,请稍等几分钟,然后再次尝试调用
register()
。
- 在未注册的命名空间中创建
- Lapdog CLI 不支持注册。您可以通过 UI 或 Python 模块进行注册。
工作区权限
在 UI 中,每个页面的底部都会找到 firecloud.org 电子邮件。这是一个代理组电子邮件,包含您以及所有您的服务帐户。要允许 Lapdog 引擎运行作业,该代理组电子邮件必须获得对作业将运行的 FireCloud 工作区的写访问权限。您可以为读取数据的 workspace 授予组读访问权限,但作业无法在没有写权限的工作区中执行。可以通过调用 lapdog.cloud.proxy_group_for_user(YOUR_EMAIL)
来找到代理组电子邮件。
注意:由于 FireCloud 中的一个错误,如果组在您注册到该命名空间的 Lapdog 引擎之前已获得对工作区的访问权限,则不会授予权限。如果您的代理电子邮件确实已获得对工作区的访问权限,但您的作业仍在权限错误失败,请尝试删除访问权限,然后重新授予权限。您可以在此处查看 FireCloud 对此错误报告的响应 此处
路线图
请参阅 里程碑页面 以阅读开发路线图。
与 Firecloud 的优缺点
优点
- 每个提交都有一个专用的 Cromwell 实例。除非您触碰到 Google 使用配额,否则您的作业永远不会排队。
- Lapdog 支持请求者付费存储桶和 GPU。
- 工作区缓存:Lapdog 缓存从 Firecloud 接收的大多数数据。
- 在发生Firecloud错误时,Lapdog将通过使用其缓存的数据来尝试继续运行。任何数据更新将在工作区同步时推送到Firecloud。
- 数据缓存:Lapdog API缓存发送到UI和从谷歌读取的数据。
- 这些缓存通过在可能的情况下存储结果,大大提高了UI性能。
- 简化UI:Lapdog UI在设计时考虑了效率。
- 生活品质功能
- 节省更新方法的时间。将
methodRepoMethod.methodVersion
设置为"latest",让Lapdog确定快照ID。 - 轻松上传数据。在将DataFrame上传到Firecloud之前,调用
prepare_entity_df
。任何本地文件路径将在后台上传到工作区的bucket,并返回一个新的包含新gs://
路径的DataFrame。 - 自动引用上传。当您调用
update_attributes
时,任何引用本地文件路径的值将在后台上传(就像prepare_entity_df
一样)。现在update_attributes
返回一个包含上传属性的字典。
- 节省更新方法的时间。将
缺点
- 每个提交运行Cromwell服务器都要额外支付0.05美元/小时的费用。
- 提交结果必须手动通过在UI中点击“上传结果”按钮上传到Firecloud。
- Lapdog引擎的运行会产生一些小额的额外费用。这些费用包括对API的调用和元数据的存储,这两者都应该是非常便宜的。
PyYAML注意
在安装Lapdog时,由于无法卸载当前的PyYAML版本,安装失败的情况经常发生,因为升级PyYAML时。
这是因为一些较旧的PyYAML版本是通过distutils
分发的,这阻止了包的卸载。新的PyYAML版本是通过setuptools
分发的,可以被成功卸载。
要解决这个问题,请转到您的Python site-packages目录。site-packages目录通常以.../lib/python{version}/site-packages/
结尾。确切的位置取决于您的平台、环境管理器和python配置。
- 对于anaconda,此路径位于anaconda的安装文件夹中:
/{path to anaconda}/envs/{environment}/lib/python{version}/site-packages
- 对于virtualenvs,此路径位于环境的安装文件夹中:
/{path to environment}/lib/python{version}/site-packages
- 对于Unix系统上的系统python:
/usr/local/lib/python{version}/site-packages
定位此文件夹的一个简单方法是打开python,然后
import yaml
yaml
此表达式将评估并打印yaml
模块的路径,它将在您的site-packages目录中。
定位到site-packages目录后,您必须删除以下两个目录
.../site-packages/yaml/
.../site-packages/PyYAML*.egg-info
一旦删除,您可以再次尝试安装lapdog的安装命令。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。