五月实习总结
- Phantoscope
- 任务一:Shell脚本
- 任务二:调研JINA
- 任务三:调研MLflow
- 任务四:调研Kubeflow
- 任务五:调研Huggingface/Transformers
- 任务六:编写ModuleLoader
从五月十号开始到现在实习差不多一个月了,虽然一开始的目标是本着milvus的开发岗位来的,结果被phantoscope抓了去,一开始对于这个做算法的部门有惶恐因为是相关知识储备不足,未来也并不打算找算法岗位,但是这一个月下来也算是收获颇丰,在此记录整理一下这一个月来的经历。
Phantoscope
Phantoscope旨在为Milvus提供上层的服务,Milvus是一个非结构化数据库,将视频,图像,音频等非结构化数据以向量形式进行存储检索管理,而Phantoscope的目的就是为这类非结构化的数据进行embedding,将它们转化为向量。但Phantoscope要做的又不局限于简单的embedding,团队希望打造的是一个toolkit,用户可以指定数据,模型,训练参数等,Phantoscope将自动为用户配置好环境,加载预训练的模型,对数据进行训练预测等,当然用户也可以将自己训练的模型保存下来。有点类似huggingface,不过huggingface专注于自然语言任务,而Pahntoscope由于主要服务于Milvus,所以将专注于图像影音领域,当前阶段我们的首要目标是CV。
任务一:Shell脚本
来到部门的第一个任务是对一些类似的项目的人员和工作量进行统计,从而估算我们部门所需要的人员,时间,工程量,所以我的第一个任务是编写一个脚本用于抓取github上repo的贡献者以及他们的贡献量。
在shell文件里通过调用git log,利用pipe对结果进行处理,将贡献者,删减代码行数,写入csv文件。shell中的pipe管道命令操作符是:|,作用是处理前一个指令传来的正确输出信息。
任务二:调研JINA
JINA整体是一个做利用深度神经网络进行信息检索的系统,但是我们所调研的只是其中一部分,它为用户提供的一种叫做Flow的工作流。
用户可以通过FLow()方法建立起一个空的工作流,类似于一个管道,通过add()方法向flow中加入各种executor,包括MyEncoder,MyIndexer,MyEvaluator。经过调研源码我们发现当用户首次向flow中加入某一种executor的时候,系统会为这种executor建立一个pod,即豆荚,然后向pod中加入executor,被称为pea,所以flow中包含的就是几种pod代表不同操作,而一个pod内部可能包含若干pea。
任务三:调研MLflow
MLflow提供的服务是机器学习模型的生命周期管理,用户可以对机器学习的模型进行load,save和log。
- load,用户可以从指定的路径load一个模型,可以从本地也可以从s3获取
- save,将当前模型保存到本地路径
- log,对模型的本次运行训练进行记录,包括模型本身parameters和metrics
支持多种机器学习框架如tensorlfow,pytorch,xgboost,sklearn等,这些框架被称为flavor,同时MLflow也支持用户自己将模型以类的形式进行封装,这一种flavor叫做pyfunc。
MLflow最大的亮点是当用户load一个模型时,系统会创建一个新的虚拟环境,配置好该模型所需的一切依赖,极大地便利了数据科学家和科研人员的远程协作,这些依赖会被记录在模型文件夹里的conda.yaml, MLmodel,requirements.txt中。
任务四:调研Kubeflow
Kubeflow和JINA类似,调研的都是他们提供的工作流,Kubeflow中的工作流被称为pipeline,同样用户可以向pipeline中加入各种operator,与JINA不同的是,kubeflow在创建operator之后,可以通过after方法,为operators创建拓扑关系,比如B.after(A),C.after(B),就创建了一个顺序的pipeline,或者C.after(A,B), 就创建了一个DAG结构。
任务五:调研Huggingface/Transformers
安装
官方要求我们在virtual environment中安装hugging face,第一次看到官方文档中这样要求,在*上查询了一下,总结一下得到的回答是,建议为每一个project都创建一个自己的虚拟环境,防止在整个系统里安装了太多包从而导致在某些项目中的冗余和冲突。
因为本身就安装了anaconda,所以可以直接用conda管理虚拟环境,conda create -n huggingface python = 3.9
创建一个名为huggingface的虚拟环境,conda activate huggigface
切换到huggingface环境下,奇怪的是根据官方文档的conda install -c huggingface transformers
安装失败了,就用pip install transformers
进行安装。同时官方文档要求我们先安装tensorflow 2.0+或pytorch之中的一个。安装完成后python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))"
应该能得到[{'label': 'POSITIVE', 'score': 0.9998704791069031}]
的输出,说明安装成功了。
特点
huggingface最大程度地降低了面向用户的抽象,每一个模型只包含三个标准类:configuration,models,tokenizer。而这些类还可以通过pre-trained instances获得,from_pretrained()
方法将从hugging face hub或用户自定的一个checkpoint获得以上类的实例和相关的数据,并且这三类对象也可以使用save_pretrained()
函数保存。
此外huggingface还提供两个API:Pipeline()
可以直接调用一个模型,Trainer/TFTrainer()
用于模型训练或调参。
Pipeline的使用
pipeline依赖tensorflow或者pytorch,专注于NLP领域,经过我们的调研,大致将pipeline为用户提供的接口分为三层,第一层面向初级用户,用户创建一个pipeline,仅仅需要提供任务类型即可,如下:
from transformers import pipeline
classifier = pipeline('sentiment-analysis')
classifier('We are very happy to show you the