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

[gpuCI] Auto-merge branch-0.17 to branch-0.18 [skip ci] #3235

Merged
merged 3 commits into from
Dec 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
- PR #3155: Eliminate unnecessary warnings from random projection test
- PR #3176: Add probabilistic SVM tests with various input array types
- PR #3180: FIL: `blocks_per_sm` support in Python
- PR #3219: Update CI to use XGBoost 1.3.0 RCs
- PR #3221: Update contributing doc for label support
- PR #3177: Make Multinomial Naive Bayes inherit from `ClassifierMixin` and use it for score

## Bug Fixes
Expand Down Expand Up @@ -91,6 +93,7 @@
- PR #3185: Add documentation for Distributed TFIDF Transformer
- PR #3190: Fix Attribute error on ICPA #3183 and PCA input type
- PR #3208: Fix EXITCODE override in notebook test script
- PR #3216: Ignore splits that do not satisfy constraints


# cuML 0.16.0 (23 Oct 2020)
Expand Down
13 changes: 12 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,21 @@ into three categories:
### A note related to our CI process
After you have started a PR (refer to step 6 in the previous section), every time you do a `git push <yourRemote> <pr-branch>`, it triggers a new CI run on all the commits thus far. Even though GPUCI has mechanisms to deal with this to a certain extent, if you keep `push`ing too frequently, it might just clog our GPUCI servers and slow down every PR and conda package generation! So, please be mindful of this and try not to do many frequent pushes.

To quantify this, the average check in our CI takes between 25 and 32 minutes on our servers. The GPUCI infrastructure has limited resources, so if the servers get overwhelmed, every current active PR will not be able to correctly schedule CI.
To quantify this, the average check in our CI takes between 80 and 90 minutes on our servers. The GPUCI infrastructure has limited resources, so if the servers get overwhelmed, every current active PR will not be able to correctly schedule CI.

Remember, if you are unsure about anything, don't hesitate to comment on issues and ask for clarifications!

### Managing PR labels

Each PR must be labeled according to whether it is a "breaking" or "non-breaking" change (using Github labels). This is used to highlight changes that users should know about when upgrading.

For cuML, a "breaking" change is one that modifies the public, non-experimental, Python API in a
non-backward-compatible way. The C++ API does not have an expectation of backward compatibility at this
time, so changes to it are not typically considered breaking. Backward-compatible API changes to the Python
API (such as adding a new keyword argument to a function) do not need to be labeled.

Additional labels must be applied to indicate whether the change is a feature, improvement, bugfix, or documentation change. See the shared RAPIDS documentation for these labels: https://github.com/rapidsai/kb/issues/42.

### Seasoned developers

Once you have gotten your feet wet and are more comfortable with the code, you
Expand Down
2 changes: 1 addition & 1 deletion ci/gpu/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ gpuci_conda_retry install -c conda-forge -c rapidsai -c rapidsai-nightly -c nvid
"dask-cudf=${MINOR_VERSION}" \
"dask-cuda=${MINOR_VERSION}" \
"ucx-py=${MINOR_VERSION}" \
"xgboost=1.2.0dev.rapidsai${MINOR_VERSION}" \
"xgboost=1.3.0dev.rapidsai${MINOR_VERSION}" \
"rapids-build-env=${MINOR_VERSION}.*" \
"rapids-notebook-env=${MINOR_VERSION}.*" \
"rapids-doc-env=${MINOR_VERSION}.*"
Expand Down
8 changes: 5 additions & 3 deletions cpp/src/decisiontree/batched-levelalgo/builder_base.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,7 @@ struct ClsTraits {
computeSplitClassificationKernel<DataT, LabelT, IdxT, TPB_DEFAULT>
<<<grid, TPB_DEFAULT, smemSize, s>>>(
b.hist, b.params.n_bins, b.params.max_depth, b.params.min_samples_split,
b.params.min_samples_leaf, b.params.min_impurity_decrease,
b.params.max_leaves, b.input, b.curr_nodes, col, b.done_count, b.mutex,
b.n_leaves, b.splits, splitType);
}
Expand Down Expand Up @@ -479,9 +480,10 @@ struct RegTraits {
computeSplitRegressionKernel<DataT, DataT, IdxT, TPB_DEFAULT>
<<<grid, TPB_DEFAULT, smemSize, s>>>(
b.pred, b.pred2, b.pred2P, b.pred_count, b.params.n_bins,
b.params.max_depth, b.params.min_samples_split, b.params.max_leaves,
b.input, b.curr_nodes, col, b.done_count, b.mutex, b.n_leaves, b.splits,
b.block_sync, splitType);
b.params.max_depth, b.params.min_samples_split,
b.params.min_samples_leaf, b.params.min_impurity_decrease,
b.params.max_leaves, b.input, b.curr_nodes, col, b.done_count, b.mutex,
b.n_leaves, b.splits, b.block_sync, splitType);
}

/**
Expand Down
23 changes: 14 additions & 9 deletions cpp/src/decisiontree/batched-levelalgo/kernels.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,10 @@ __device__ OutT* alignPointer(InT input) {
template <typename DataT, typename LabelT, typename IdxT, int TPB>
__global__ void computeSplitClassificationKernel(
int* hist, IdxT nbins, IdxT max_depth, IdxT min_samples_split,
IdxT max_leaves, Input<DataT, LabelT, IdxT> input,
const Node<DataT, LabelT, IdxT>* nodes, IdxT colStart, int* done_count,
int* mutex, const IdxT* n_leaves, Split<DataT, IdxT>* splits,
CRITERION splitType) {
IdxT min_samples_leaf, DataT min_impurity_decrease, IdxT max_leaves,
Input<DataT, LabelT, IdxT> input, const Node<DataT, LabelT, IdxT>* nodes,
IdxT colStart, int* done_count, int* mutex, const IdxT* n_leaves,
Split<DataT, IdxT>* splits, CRITERION splitType) {
extern __shared__ char smem[];
IdxT nid = blockIdx.z;
auto node = nodes[nid];
Expand Down Expand Up @@ -326,9 +326,11 @@ __global__ void computeSplitClassificationKernel(
sp.init();
__syncthreads();
if (splitType == CRITERION::GINI) {
giniGain<DataT, IdxT>(shist, sbins, sp, col, range_len, nbins, nclasses);
giniGain<DataT, IdxT>(shist, sbins, sp, col, range_len, nbins, nclasses,
min_samples_leaf, min_impurity_decrease);
} else {
entropyGain<DataT, IdxT>(shist, sbins, sp, col, range_len, nbins, nclasses);
entropyGain<DataT, IdxT>(shist, sbins, sp, col, range_len, nbins, nclasses,
min_samples_leaf, min_impurity_decrease);
}
__syncthreads();
sp.evalBestSplit(smem, splits + nid, mutex + nid);
Expand All @@ -337,7 +339,8 @@ __global__ void computeSplitClassificationKernel(
template <typename DataT, typename LabelT, typename IdxT, int TPB>
__global__ void computeSplitRegressionKernel(
DataT* pred, DataT* pred2, DataT* pred2P, IdxT* count, IdxT nbins,
IdxT max_depth, IdxT min_samples_split, IdxT max_leaves,
IdxT max_depth, IdxT min_samples_split, IdxT min_samples_leaf,
DataT min_impurity_decrease, IdxT max_leaves,
Input<DataT, LabelT, IdxT> input, const Node<DataT, LabelT, IdxT>* nodes,
IdxT colStart, int* done_count, int* mutex, const IdxT* n_leaves,
Split<DataT, IdxT>* splits, void* workspace, CRITERION splitType) {
Expand Down Expand Up @@ -471,7 +474,8 @@ __global__ void computeSplitRegressionKernel(
scount[i] = count[gcOffset + i];
}
__syncthreads();
mseGain(spred, scount, sbins, sp, col, range_len, nbins);
mseGain(spred, scount, sbins, sp, col, range_len, nbins, min_samples_leaf,
min_impurity_decrease);
} else {
for (IdxT i = threadIdx.x; i < len; i += blockDim.x) {
spred2[i] = pred2[gOffset + i];
Expand All @@ -480,7 +484,8 @@ __global__ void computeSplitRegressionKernel(
spred2P[i] = pred2P[gcOffset + i];
}
__syncthreads();
maeGain(spred2, spred2P, scount, sbins, sp, col, range_len, nbins);
maeGain(spred2, spred2P, scount, sbins, sp, col, range_len, nbins,
min_samples_leaf, min_impurity_decrease);
}
__syncthreads();
sp.evalBestSplit(smem, splits + nid, mutex + nid);
Expand Down
Loading