我有一个python脚本,其中,我正在构建doc2vec模型并将其保存到具有不同版本名称的s3中。请参阅截图以供参考
现在数据库中的数据每周更新一次,我需要重新构建包括新数据的doc2vec模型。
为此,我已在AWS Lambda中安排了一个脚本,每周一次运行python脚本。
现在我要在本周以“ model_d2v_version_008”开头的模型名称将模型保存到s3中,然后在下周以“ model_d2v_version_009”的开头,依此类推,每周一次。
我曾在自动化过程之前提供过model_name的信息
def d2v_doc(titles_df):
tagged_data = [TaggedDocument(words=_d, tags=[str(titles_df['id_titles'][i])]) for i, _d in enumerate(titles_df['doc'])]
model_d2v = Doc2Vec(vector_size=300,min_count=10, dm=1)
model_d2v.build_vocab(tagged_data)
model_d2v.train(tagged_data,epochs=100,total_examples=model_d2v.corpus_count)
return model_d2v
def save_d2v_to_s3(model,fname):
model_name = fname
joblib.dump(model,model_name)
s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
path = s3_base_path+'/'+model_name
command = "aws s3 cp {} {}".format(model_name,path).split()
print('saving...'+model_name)
subprocess.call(command)
model_doc = d2v_doc(titles_df)
save_d2v_to_s3(model_doc,"model_d2v_version_007")
现在,由于该过程是自动化的,所以我希望model_names保持相同的格式,并每周增加版本数。我该怎么办?
如果系统的寿命比预期的长,或者以加速的进度(只要每天仍不超过一次),它们的排序仍然正确。 (格式为YYYYMMDD
的数字在到达007
时会以一种有用的方式停止排序。)
[如果您确实希望每天创建多个模型,则可以使用后缀,精确到分钟或秒(1000
,甚至可能带有尾随的'Z'来暗示UTC),例如现在[ C0]。
如果仅使用AWS存储桶信息就需要对所有版本进行计数,则它需要与其他任何编号相同的over-key迭代键(才能到达最后一项),同时在其中使其他有用信息(最早,最新)生动起来。文件名。
进行新的保存只需要准确的系统日期即可。 (而且,尽管时钟错误可能导致各种各样的毛病,但如今,一个能够读写S3的系统几乎总是有一个可靠的日期。)确保您不会无意间重用名称,从而可能会破坏名称事先运行,需要完全相同的检查量。 (但是,如果存在多个系统/进程以几乎同时/交错的方式尝试相同操作的风险,则风险之窗仍然很小。)
另一方面,如果您确实要使用简单的固定宽度递增版本号,请将最后使用的编号存储在某个地方。当您需要新名称时...
YYYYMMDDHHMMSS
但是基于日期/时间戳的命名要好得多:
'model_d2v_version_20200518183227Z'