-
Notifications
You must be signed in to change notification settings - Fork 5.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于文件上传 #1902
Comments
今天跟@wangkuiyi 讨论了一下,结论是文件的管理会是整个训练流程的核心:数据partition是对文件的操作,这些partition的数据会被到用户的根目录里,trainer需要能够访问文件来读训练集,模型会被输出到用户的根目录里,最后用户还需要能够下载训练好的模型。 不好意思,现在讲的跟之前的和大家讨论的结果其实是有冲突的,之前是只用一个接口 |
可能需要讨论的问题:
|
@Yancey1989 ,请问把file server暴露给用户能否通过k8s的ingress? 初步想法: 正则表达式要看看cephfs的api支不支持正则表达式。 客户端可以考虑用golang,因为服务器也是golang,传输可以考虑gorpc。 断点续传可以通过算文件md5作为唯一标识,把文件切成多个小块,分批上传。服务器上面收到每个小块需要存到磁盘里并写入CRC校验值,并把存的路径写入数据库(数据库可以考虑boltdb),等到小块满了之后再拼起来。 目前需要支持的命令感觉有:
|
@helinwang 要通过k8s的ingress,理论上来说外网的流量都要统一通过ingress转发才行。 |
@helinwang 文件切成小块然后sync到服务器是一个非常好的办法。
s3的命令行参数我去整理一下 |
用文件的最后修改时间来判断文件是否修改过是否靠谱那?这个主要是为了考虑上传的时候,不用每次都要计算MD5值来判断client端和server端的文件是否一致。 |
和@helinwang讨论了一下,做了一些简化:
多谢helin,有些优化我纠结了很长时间。 |
这里我理解fileserver仍然是一个进程池/线程池模型的 server,这样可以处理来自多个用户的并发请求,但是对于同一用户来说仍然是单线程处理文件写入?这样是否需要为每个用户引入一个文件上传的队列,在用户上传多个文件(一个文件夹)的时候可以保证"单线程上传" |
和@typhoonzero聊了一下
|
@typhoonzero 和 @Yancey1989 建议用http来做文件管理,这样可以利用现有的框架做用户认证。 |
@gongweibao @typhoonzero @Yancey1989 好的,golang RPC是基于HTTP的,理论上可以做HTTP的认证。要是麻烦的话我们可以用HTTP service。 |
现在框架的认证说明: https://docs.djangoproject.com/en/1.11/topics/auth/ 感觉比较重要的需要决定的问题是:fileserver是否作为单独的http server运行,还是集成在现在的web site中,把一种url pattern作为fileserver的API入口 以单独方式运行:符合“微服务”架构,即每个service只负责部分功能,服务之间使用HTTP协议互相调用;服务调用方式更佳统一和一致(cloud website调用kubernetes api也是通过HTTP方式调用);缺点是系统组件变多,服务依赖会导致未来更新某个微服务会影响诸多服务。 |
我粗略看了一下django的框架认证,貌似是基于HTTP header的token认证,django做好了一套权限管理的系统,对每个URL pattern,可以给不同用户组单独设立权限。 我觉得的好处是这套系统已经做好了,不需要做额外的认证以及权限管理。 |
根据讨论,关于权限部分,fileserver和client使用golang编写(可以参考是否使用swagger),用户认证使用PaddlePaddle/cloud网站生成的X509 cert。简化权限管理:每个用户独享一部分存储空间。公开数据集单独使用一个ceph volume,在用户启动pod时只读挂载。 |
经过调研,发现网页上传文件已经比较成熟,文件断点续传和大文件分片上传已经是标配
比如 jQuery File Upload,开源协议MIT
另外:百度开源的webuploader
这个比我们一开始设计的用命令行工具上传文件更加的简单直接
附:
我们第一期可以考虑不给一个file的explorer用来管理文件,类似elFinder,开源协议BSD-3
The text was updated successfully, but these errors were encountered: