Files
paddlepaddle--paddle/paddle/fluid/pir/serialize_deserialize/include/interface.h
T
2026-07-13 12:40:42 +08:00

154 lines
6.1 KiB
C++

// Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <string>
#include "paddle/phi/core/dense_tensor.h"
#include "paddle/pir/include/core/dll_decl.h"
#include "paddle/pir/include/core/program.h"
namespace pir {
/**
* @brief Write the given PIR program into a file at the specified file path.
*
* @param[in] program The PIR program to be written.
* @param[in] file_path The path to the file to be written.
* @param[in] pir_version The version number of PIR, used to identify or verify
* the written program version
* @param[in] overwrite If the file already exists, this flag determines
* whether to overwrite the existing file.
* @param[in] readable (Optional parameter, default to false) If true, the
* generated file will be has indent structure.
* @param[in] trainable (Optional parameter, default to true) If true,
* operation has opresult_attrs for training like stop_gradient,persistable;
* Otherwise, it may only has opinfo attrs.
*
* @return void。
*
* @note readable and trainable Parameters may affect the content and format of
* the generated file, depending on implementation.
*/
void IR_API WriteModule(const pir::Program& program,
const std::string& file_path,
bool overwrite = true,
bool readable = false,
bool trainable = true,
int64_t pir_version = -1);
/**
* @brief Gets a PIR program from the specified file path.
*
* @param[in] file_path The path to the file from which the PIR program
* should be read.
* @param[out] program A pointer to the PIR program object where the
* deserialize program will be stored.
* @param[in] pir_version The current version of the PIR program format.
*
* @return bool. The function modifies the 'program' object to contain the data
* read from the file. return bool indicates whether the program can use to
* funtune.
*
* @note If 'pir_version' is larger than the version of file, will trigger
* version compatibility modification rule.
*/
bool IR_API ReadModule(const std::string& file_path,
pir::Program* program,
int64_t pir_version = -1);
/**
* @brief Save the given tensor into a single file at the specified file path
* with its name.
*
* @param[in] x The tensor to be saved.
* @param[in] name The name of the tensor
* @param[in] file_path The path of the file to be written.
* @param[in] overwrite If the file already exists, this flag determines
* whether to overwrite the existing file.
* @param[in] save_as_fp16 If the flag is true, the tensor will be saved as
* fp16 type.
*
* @return void。
*
*/
void IR_API SaveFunction(const phi::DenseTensor& x,
const std::string& name,
const std::string& file_path,
bool overwrite,
bool save_as_fp16);
/**
* @brief Save the given tensor list into a combined file at the specified file
* path with the given name.
*
* @param[in] x The tensor list to be saved.
* @param[in] name The names of the tensors.
* @param[in] file_path The path of the file to be written.
* @param[in] overwrite If the file already exists, this flag determines
* whether to overwrite the existing file.
* @param[in] save_as_fp16 If the flag is true, the tensor will be saved as
* fp16 type.
*
* @param[in] save_to_memory If the flag is true, the tensor will be saved in
* memory.
*
* @return void。
*
*/
void IR_API SaveCombineFunction(const std::vector<const phi::DenseTensor*>& x,
const std::vector<std::string>& names,
const std::string& file_path,
bool overwrite,
bool save_as_fp16,
bool save_to_memory);
/**
* @brief Save the given tensor into a single file at the specified file path
* with its name.
*
* @param[in] file_path The path of the file to be read.
* @param[in] seek The position of the file to be read.
* @param[in] shape The shape of the tensor to be loaded.
* @param[in] load_as_fp16 If the flag is true, the tensor will be loaded
* as fp16 type.
* @param[out] out The tensor to be loaded.
*
* @return void。
*
*/
void IR_API LoadFunction(const std::string& file_path,
int64_t seek,
const std::vector<int64_t>& shape,
bool load_as_fp16,
phi::DenseTensor* out,
phi::Place place = phi::Place());
/**
* @brief Save the given tensor into a single file at the specified file path
* with its name.
*
* @param[in] file_path The path of the file to be read.
* @param[in] names The names of the tensors.
* @param[out] out The tensor to be loaded.
* @param[in] load_as_fp16 If the flag is true, the tensor will be loaded
* as fp16 type.
*
* @return void。
*
*/
void IR_API LoadCombineFunction(const std::string& file_path,
const std::vector<std::string>& names,
std::vector<phi::DenseTensor*>* out,
bool load_as_fp16,
phi::Place place = phi::Place());
} // namespace pir