Skip to content
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

Fix indexing of PCA to use safer types #4255

Merged
merged 15 commits into from
Nov 5, 2021
6 changes: 3 additions & 3 deletions cpp/cmake/thirdparty/get_raft.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,6 @@ set(CUML_BRANCH_VERSION_raft "${CUML_VERSION_MAJOR}.${CUML_VERSION_MINOR}")
# To use a different RAFT locally, set the CMake variable
# CPM_raft_SOURCE=/path/to/local/raft
find_and_configure_raft(VERSION ${CUML_MIN_VERSION_raft}
FORK rapidsai
PINNED_TAG branch-${CUML_BRANCH_VERSION_raft}
)
FORK lowener
lowener marked this conversation as resolved.
Show resolved Hide resolved
PINNED_TAG 21.12-eig-64
)
14 changes: 7 additions & 7 deletions cpp/include/cuml/decomposition/params.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,24 +31,24 @@ enum class solver : int {

class params {
public:
int n_rows;
int n_cols;
std::size_t n_rows;
std::size_t n_cols;
int gpu_id = 0;
};

class paramsSolver : public params {
public:
// math_t tol = 0.0;
float tol = 0.0;
int n_iterations = 15;
int verbose = 0;
float tol = 0.0;
std::uint32_t n_iterations = 15;
lowener marked this conversation as resolved.
Show resolved Hide resolved
int verbose = 0;
};

template <typename enum_solver = solver>
class paramsTSVDTemplate : public paramsSolver {
public:
int n_components = 1;
enum_solver algorithm = enum_solver::COV_EIG_DQ;
std::size_t n_components = 1;
lowener marked this conversation as resolved.
Show resolved Hide resolved
enum_solver algorithm = enum_solver::COV_EIG_DQ;
};

/**
Expand Down
8 changes: 4 additions & 4 deletions cpp/include/cuml/decomposition/sign_flip_mg.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,17 @@ void sign_flip(raft::handle_t& handle,
std::vector<MLCommon::Matrix::Data<float>*>& input_data,
MLCommon::Matrix::PartDescriptor& input_desc,
float* components,
int n_components,
std::size_t n_components,
cudaStream_t* streams,
int n_stream);
std::size_t n_stream);
lowener marked this conversation as resolved.
Show resolved Hide resolved

void sign_flip(raft::handle_t& handle,
std::vector<MLCommon::Matrix::Data<double>*>& input_data,
MLCommon::Matrix::PartDescriptor& input_desc,
double* components,
int n_components,
std::size_t n_components,
cudaStream_t* streams,
int n_stream);
std::size_t n_stream);
lowener marked this conversation as resolved.
Show resolved Hide resolved

}; // end namespace opg
}; // end namespace PCA
Expand Down
12 changes: 6 additions & 6 deletions cpp/include/cuml/decomposition/tsvd_mg.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ namespace opg {
*/
void fit(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
lowener marked this conversation as resolved.
Show resolved Hide resolved
MLCommon::Matrix::floatData_t** input,
float* components,
float* singular_vals,
Expand All @@ -46,7 +46,7 @@ void fit(raft::handle_t& handle,

void fit(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
lowener marked this conversation as resolved.
Show resolved Hide resolved
MLCommon::Matrix::doubleData_t** input,
double* components,
double* singular_vals,
Expand Down Expand Up @@ -104,7 +104,7 @@ void fit_transform(raft::handle_t& handle,
*/
void transform(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
MLCommon::Matrix::Data<float>** input,
float* components,
MLCommon::Matrix::Data<float>** trans_input,
Expand All @@ -113,7 +113,7 @@ void transform(raft::handle_t& handle,

void transform(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
MLCommon::Matrix::Data<double>** input,
double* components,
MLCommon::Matrix::Data<double>** trans_input,
Expand All @@ -133,7 +133,7 @@ void transform(raft::handle_t& handle,
*/
void inverse_transform(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
MLCommon::Matrix::Data<float>** trans_input,
float* components,
MLCommon::Matrix::Data<float>** input,
Expand All @@ -142,7 +142,7 @@ void inverse_transform(raft::handle_t& handle,

void inverse_transform(raft::handle_t& handle,
MLCommon::Matrix::RankSizePair** rank_sizes,
size_t n_parts,
std::size_t n_parts,
MLCommon::Matrix::Data<double>** trans_input,
double* components,
MLCommon::Matrix::Data<double>** input,
Expand Down
28 changes: 18 additions & 10 deletions cpp/src/pca/pca.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ void truncCompExpVars(const raft::handle_t& handle,
math_t* components,
math_t* explained_var,
math_t* explained_var_ratio,
const paramsTSVDTemplate<enum_solver> prms,
const paramsTSVDTemplate<enum_solver>& prms,
cudaStream_t stream)
{
size_t len = prms.n_cols * prms.n_cols;
auto len = prms.n_cols * prms.n_cols;
rmm::device_uvector<math_t> components_all(len, stream);
rmm::device_uvector<math_t> explained_var_all(prms.n_cols, stream);
rmm::device_uvector<math_t> explained_var_ratio_all(prms.n_cols, stream);
Expand All @@ -55,10 +55,18 @@ void truncCompExpVars(const raft::handle_t& handle,
components_all.data(), prms.n_cols, components, prms.n_components, prms.n_cols, stream);
raft::matrix::ratio(
handle, explained_var_all.data(), explained_var_ratio_all.data(), prms.n_cols, stream);
raft::matrix::truncZeroOrigin(
explained_var_all.data(), prms.n_cols, explained_var, prms.n_components, 1, stream);
raft::matrix::truncZeroOrigin(
explained_var_ratio_all.data(), prms.n_cols, explained_var_ratio, prms.n_components, 1, stream);
raft::matrix::truncZeroOrigin(explained_var_all.data(),
prms.n_cols,
explained_var,
prms.n_components,
std::size_t(1),
stream);
raft::matrix::truncZeroOrigin(explained_var_ratio_all.data(),
prms.n_cols,
explained_var_ratio,
prms.n_components,
std::size_t(1),
stream);
}

/**
Expand Down Expand Up @@ -97,12 +105,12 @@ void pcaFit(const raft::handle_t& handle,
ASSERT(prms.n_components > 0,
"Parameter n_components: number of components cannot be less than one");

int n_components = prms.n_components;
auto n_components = prms.n_components;
if (n_components > prms.n_cols) n_components = prms.n_cols;

raft::stats::mean(mu, input, prms.n_cols, prms.n_rows, true, false, stream);

size_t len = prms.n_cols * prms.n_cols;
auto len = prms.n_cols * prms.n_cols;
rmm::device_uvector<math_t> cov(len, stream);

Stats::cov(handle, cov.data(), input, mu, prms.n_cols, prms.n_rows, true, false, true, stream);
Expand Down Expand Up @@ -202,7 +210,7 @@ void pcaInverseTransform(const raft::handle_t& handle,
ASSERT(prms.n_components > 0,
"Parameter n_components: number of components cannot be less than one");

std::size_t components_len = static_cast<std::size_t>(prms.n_cols * prms.n_components);
auto components_len = prms.n_cols * prms.n_components;
rmm::device_uvector<math_t> components_copy{components_len, stream};
raft::copy(components_copy.data(), components, prms.n_cols * prms.n_components, stream);

Expand Down Expand Up @@ -262,7 +270,7 @@ void pcaTransform(const raft::handle_t& handle,
ASSERT(prms.n_components > 0,
"Parameter n_components: number of components cannot be less than one");

std::size_t components_len = static_cast<std::size_t>(prms.n_cols * prms.n_components);
auto components_len = prms.n_cols * prms.n_components;
rmm::device_uvector<math_t> components_copy{components_len, stream};
raft::copy(components_copy.data(), components, prms.n_cols * prms.n_components, stream);

Expand Down
Loading