|  |  | @ -30,6 +30,9 @@ namespace operators { | 
			
		
	
		
		
			
				
					
					|  |  |  | // TODO(sidgoyal78): These function are needed by other files (save_op), move
 |  |  |  | // TODO(sidgoyal78): These function are needed by other files (save_op), move
 | 
			
		
	
		
		
			
				
					
					|  |  |  | // them to paddle::filesystem namespace. (as noted by yuyang18 in save_op).
 |  |  |  | // them to paddle::filesystem namespace. (as noted by yuyang18 in save_op).
 | 
			
		
	
		
		
			
				
					
					|  |  |  | constexpr char kSEP = '/'; |  |  |  | constexpr char kSEP = '/'; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | // write empty file named _SUCCESS
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | const char SUCCESS[] = "_SUCCESS"; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static bool FileExists(const std::string &filepath) { |  |  |  | static bool FileExists(const std::string &filepath) { | 
			
		
	
		
		
			
				
					
					|  |  |  |   struct stat buffer; |  |  |  |   struct stat buffer; | 
			
		
	
		
		
			
				
					
					|  |  |  |   return (stat(filepath.c_str(), &buffer) == 0); |  |  |  |   return (stat(filepath.c_str(), &buffer) == 0); | 
			
		
	
	
		
		
			
				
					|  |  | @ -73,8 +76,11 @@ class CheckpointSaveOp : public framework::OperatorBase { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     bool is_present = FileExists(dir); |  |  |  |     bool is_present = FileExists(dir); | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (is_present && !overwrite) { |  |  |  |     if (is_present && !overwrite) { | 
			
		
	
		
		
			
				
					
					|  |  |  |       PADDLE_THROW("%s exists!, cannot save_combine to it when overwrite=false", |  |  |  |       return; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                    dir, overwrite); |  |  |  |       // todo(tangwei) judge the folder is exist
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       // PADDLE_THROW("%s exists!, cannot save_combine to it when
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       // overwrite=false",
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       //              dir, overwrite);
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     MkDirRecursively(dir.c_str()); |  |  |  |     MkDirRecursively(dir.c_str()); | 
			
		
	
	
		
		
			
				
					|  |  | @ -108,6 +114,13 @@ class CheckpointSaveOp : public framework::OperatorBase { | 
			
		
	
		
		
			
				
					
					|  |  |  |       framework::SerializeToStream(fout, tensor, dev_ctx); |  |  |  |       framework::SerializeToStream(fout, tensor, dev_ctx); | 
			
		
	
		
		
			
				
					
					|  |  |  |       fout.close(); |  |  |  |       fout.close(); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     std::string success; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     success.append(dir); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     success.append("/"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     success.append(SUCCESS); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     std::ofstream fout(success); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fout.close(); | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | }; |  |  |  | }; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |